spec/groupdocs/document_spec.rb in groupdocs-2.2.0 vs spec/groupdocs/document_spec.rb in groupdocs-2.3.0
- old
+ new
@@ -1,859 +1,859 @@
-require 'spec_helper'
-
-describe GroupDocs::Document do
-
- it_behaves_like GroupDocs::Api::Entity
- include_examples GroupDocs::Api::Helpers::Status
-
- subject do
- file = GroupDocs::Storage::File.new
- described_class.new(:file => file)
- end
-
- describe '.views!' do
- before(:each) do
- mock_api_server(load_json('document_views'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- described_class.views!({}, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns an array of GroupDocs::Document::View objects' do
- views = described_class.views!
- views.should be_an(Array)
- views.each do |view|
- view.should be_a(GroupDocs::Document::View)
- end
- end
- end
-
- describe '.templates!' do
- before(:each) do
- mock_api_server(load_json('templates_get'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- described_class.templates!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns an array of GroupDocs::Document objects' do
- templates = described_class.templates!
- templates.should be_an(Array)
- templates.each do |template|
- template.should be_a(GroupDocs::Document)
- end
- end
- end
-
- describe '.sign_documents!' do
- before(:each) do
- mock_api_server(load_json('sign_documents'))
- end
-
- let(:documents) do
- [GroupDocs::Document.new(:file => GroupDocs::Storage::File.new(:name => 'Document1', :local_path => __FILE__)),
- GroupDocs::Document.new(:file => GroupDocs::Storage::File.new(:name => 'Document2', :local_path => 'spec/support/files/resume.pdf'))]
- end
- let(:signatures) { [GroupDocs::Signature.new(:name => 'John Smith', :image_path => 'spec/support/files/signature.png', :position => {})] }
-
- it 'accepts access credentials hash' do
- lambda do
- described_class.sign_documents!(documents, signatures, {}, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'raises error if document is not GroupDocs::Document object' do
- lambda { described_class.sign_documents!(['Document'], signatures) }.should raise_error(ArgumentError)
- end
-
- it 'raises error if document file does not have name' do
- documents = [GroupDocs::Document.new(:file => GroupDocs::Storage::File.new(:local_path => __FILE__))]
- lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
- end
-
- it 'raises error if document file does not have local path' do
- documents = [GroupDocs::Document.new(:file => GroupDocs::Storage::File.new(:name => 'Document'))]
- lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
- end
-
- it 'raises error if signature is not GroupDocs::Signature object' do
- lambda { described_class.sign_documents!(documents, ['Signature']) }.should raise_error(ArgumentError)
- end
-
- it 'raises error if signature does not have name' do
- signatures = [GroupDocs::Signature.new(:image_path => __FILE__, :position => {})]
- lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
- end
-
- it 'raises error if signature does not have image path' do
- signatures = [GroupDocs::Signature.new(:name => 'John Smith', :position => {})]
- lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
- end
-
- it 'raises error if signature does not have position' do
- signatures = [GroupDocs::Signature.new(:name => 'John Smith', :image_path => __FILE__)]
- lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
- end
-
- it 'detects each document and signature file MIME type' do
- documents.each { |document| described_class.should_receive(:mime_type).with(document.file.local_path).once }
- signatures.each { |signature| described_class.should_receive(:mime_type).with(signature.image_path).once }
- described_class.sign_documents!(documents, signatures)
- end
-
-
- end
-
- describe ',metadata!' do
- before(:each) do
- mock_api_server(load_json('document_metadata'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- described_class.metadata!('document_one.doc', :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns GroupDocs::Document::MetaData object' do
- described_class.metadata!('document_one.doc').should be_a(GroupDocs::Document::MetaData)
- end
-
- it 'sets last view as GroupDocs::Document::View object if document was viewed at least once' do
- described_class.metadata!('document_one.doc').last_view.should be_a(GroupDocs::Document::View)
- end
-
- it 'does not set last view if document has never been viewed' do
- mock_api_server('{ "status": "Ok", "result": { "last_view": null }}')
- described_class.metadata!('document_one.doc').last_view.should be_nil
- end
- end
-
- it { should have_accessor(:file) }
- it { should have_accessor(:process_date) }
- it { should have_accessor(:outputs) }
- it { should have_accessor(:output_formats) }
- it { should have_accessor(:order) }
- it { should have_accessor(:field_count) }
- it { should have_accessor(:news_enabled) }
- it { should have_accessor(:alerts_enabled) }
- it { should have_accessor(:support_enabled) }
- it { should have_accessor(:is_real_time_broadcast_enabled) }
- it { should have_accessor(:is_scroll_broadcast_enabled) }
- it { should have_accessor(:is_zoom_broadcast_enabled) }
- it { should have_accessor(:is_annotation_navigation_widget_enabled) }
- it { should have_accessor(:is_annotation_zoom_widget_enabled) }
- it { should have_accessor(:is_annotation_download_widget_enabled) }
- it { should have_accessor(:is_annotation_print_widget_enabled) }
- it { should have_accessor(:is_annotation_help_widget_enabled) }
- it { should have_accessor(:is_right_panel_enabled) }
- it { should have_accessor(:is_thumbnails_panel_enabled) }
- it { should have_accessor(:is_toolbar_enabled) }
- it { should have_accessor(:is_text_annotation_button_enabled) }
- it { should have_accessor(:is_rectangle_annotation_button_enabled) }
- it { should have_accessor(:is_point_annotation_button_enabled) }
- it { should have_accessor(:is_strikeout_annotation_button_enabled) }
- it { should have_accessor(:is_polyline_annotation_button_enabled) }
- it { should have_accessor(:is_typewriter_annotation_button_enabled) }
- it { should have_accessor(:is_watermark_annotation_button_enabled) }
- it { should have_accessor(:is_viewer_navigation_widget_enabled) }
- it { should have_accessor(:is_viewer_zoom_widget_enabled) }
- it { should have_accessor(:is_viewer_download_widget_enabled) }
- it { should have_accessor(:is_viewer_print_widget_enabled) }
- it { should have_accessor(:is_viewer_help_widget_enabled) }
- it { should have_accessor(:is_standard_header_always_shown) }
- it { should have_accessor(:is_annotation_document_name_shown) }
- it { should have_accessor(:is_viewer_document_name_shown) }
-
- it { should have_alias(:access_mode=, :access_mode_set!) }
-
- describe '#outputs=' do
- let(:response) do
- [
- { :ftype => 1, :guid => 'fhy9yh94u238dgf' },
- { :ftype => 2, :guid => 'ofh9rhy9rfohf9s' }
- ]
- end
-
- it 'saves outputs as array of GroupDocs::Storage::File objects' do
- subject.outputs = response
- outputs = subject.outputs
- outputs.should be_an(Array)
- outputs.each do |output|
- output.should be_a(GroupDocs::Storage::File)
- end
- end
-
- it 'does nothing if nil is passed' do
- lambda do
- subject.outputs = nil
- end.should_not change(subject, :outputs)
- end
- end
-
- describe '#output_formats' do
- it 'returns parsed array of output formats' do
- subject.output_formats = "pdf,tiff,doc"
- subject.output_formats.should == [:pdf, :tiff, :doc]
- end
- end
-
- describe '#process_date' do
- it 'returns converted to Time object Unix timestamp' do
- subject.process_date = 1330450135000
- subject.process_date.should == Time.at(1330450135)
- end
- end
-
- describe '#initialize' do
- it 'raises error if file is not specified' do
- lambda { described_class.new }.should raise_error(ArgumentError)
- end
-
- it 'raises error if file is not an instance of GroupDocs::Storage::File' do
- lambda { described_class.new(:file => '') }.should raise_error(ArgumentError)
- end
- end
-
- describe '#page_images!' do
- before(:each) do
- mock_api_server(load_json('document_page_images_get'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.page_images!(640, 480, {}, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'accepts options hash' do
- lambda do
- subject.page_images!(640, 480, :first_page => 0, :page_count => 1)
- end.should_not raise_error()
- end
-
- it 'returns array of URLs' do
- urls = subject.page_images!(640, 480)
- urls.should be_an(Array)
- urls.each do |url|
- url.should be_a(String)
- end
- end
- end
-
- describe '#thumbnails!' do
- before(:each) do
- mock_api_server(load_json('document_thumbnails'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.thumbnails!({}, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'accepts options hash' do
- lambda do
- subject.thumbnails!(:page_number => 0, :page_count => 1)
- end.should_not raise_error()
- end
-
- it 'returns array of URLs' do
- urls = subject.thumbnails!
- urls.should be_an(Array)
- urls.each do |url|
- url.should be_a(String)
- end
- end
- end
-
- describe '#access_mode!' do
- before(:each) do
- mock_api_server(load_json('document_access_info_get'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.access_mode!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns access mode in human readable presentation' do
- subject.should_receive(:parse_access_mode).with('Private').and_return(:private)
- subject.access_mode!.should == :private
- end
- end
-
- describe '#access_mode_set!' do
- before(:each) do
- mock_api_server('{"status": "Ok", "result": {"access": "Private" }}')
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.access_mode_set!(:private, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'sets corresponding access mode' do
- described_class::ACCESS_MODES.should_receive(:[]).with(:private).and_return(0)
- subject.should_receive(:parse_access_mode).with('Private').and_return(:private)
- subject.access_mode_set!(:private)
- end
-
- it 'returns set of access modes' do
- subject.access_mode_set!(:private).should == :private
- end
-
- it 'is aliased to #access_mode=' do
- subject.should have_alias(:access_mode=, :access_mode_set!)
- end
- end
-
- describe '#formats!' do
- before(:each) do
- mock_api_server(load_json('document_formats'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.formats!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns an array of symbols' do
- formats = subject.formats!
- formats.should be_an(Array)
- formats.each do |format|
- format.should be_a(Symbol)
- end
- end
- end
-
- describe '#metadata!' do
- before(:each) do
- mock_api_server(load_json('document_metadata'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.metadata!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns GroupDocs::Document::MetaData object' do
- subject.metadata!.should be_a(GroupDocs::Document::MetaData)
- end
-
- it 'sets last view as GroupDocs::Document::View object if document was viewed at least once' do
- subject.metadata!.last_view.should be_a(GroupDocs::Document::View)
- end
-
- it 'uses self document in last view object' do
- subject.metadata!.last_view.document.should be_a(GroupDocs::Document)
- end
-
- it 'does not set last view if document has never been viewed' do
- mock_api_server('{ "status": "Ok", "result": { "last_view": null }}')
- subject.metadata!.last_view.should be_nil
- end
- end
-
- describe '#fields!' do
- before(:each) do
- mock_api_server(load_json('document_fields'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.fields!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns array of GroupDocs::Document::Field objects' do
- fields = subject.fields!
- fields.should be_an(Array)
- fields.each do |field|
- field.should be_a(GroupDocs::Document::Field)
- end
- end
- end
-
- describe '#sharers!' do
- before(:each) do
- mock_api_server(load_json('document_access_info_get'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.sharers!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns an array of GroupDocs::User objects' do
- users = subject.sharers!
- users.should be_an(Array)
- users.each do |user|
- user.should be_a(GroupDocs::User)
- end
- end
- end
-
- describe '#sharers_set!' do
- before(:each) do
- mock_api_server(load_json('document_sharers_set'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.sharers_set!(%w(test1@email.com), :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns an array of GroupDocs::User objects' do
- users = subject.sharers_set!(%w(test1@email.com))
- users.should be_an(Array)
- users.each do |user|
- user.should be_a(GroupDocs::User)
- end
- end
-
- it 'clears sharers if empty array is passed' do
- subject.should_receive(:sharers_clear!)
- subject.sharers_set!([])
- end
-
- it 'clears sharers if nil is passed' do
- subject.should_receive(:sharers_clear!)
- subject.sharers_set!(nil)
- end
- end
-
- describe '#sharers_clear!' do
- before(:each) do
- mock_api_server(load_json('document_sharers_remove'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.sharers_clear!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'clears sharers list and returns nil' do
- subject.sharers_clear!.should be_nil
- end
- end
-
- describe '#convert!' do
- before(:each) do
- mock_api_server(load_json('document_convert'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.convert!(:pdf, {}, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'accepts options hash' do
- lambda do
- subject.convert!(:pdf, :email_results => true)
- end.should_not raise_error()
- end
-
- it 'returns GroupDocs::Job object' do
- subject.convert!(:pdf).should be_a(GroupDocs::Job)
- end
- end
-
- describe '#questionnaires!' do
- before(:each) do
- mock_api_server(load_json('document_questionnaires'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.questionnaires!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns an array of GroupDocs::Questionnaire objects' do
- questionnaires = subject.questionnaires!
- questionnaires.should be_an(Array)
- questionnaires.each do |questionnaire|
- questionnaire.should be_a(GroupDocs::Questionnaire)
- end
- end
- end
-
- describe '#add_questionnaire!' do
- before(:each) do
- mock_api_server('{ "status": "Ok", "result": {}}')
- end
-
- let(:questionnaire) do
- GroupDocs::Questionnaire.new(:id => 1)
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.add_questionnaire!(questionnaire, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'raises error if questionnaire is not GroupDocs::Questionnaire object' do
- lambda { subject.add_questionnaire!('Questionnaire') }.should raise_error(ArgumentError)
- end
- end
-
- describe '#create_questionnaire!' do
- before(:each) do
- mock_api_server(load_json('document_questionnaire_create'))
- end
-
- let(:questionnaire) do
- GroupDocs::Questionnaire.new(:name => 'Q1')
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.create_questionnaire!(questionnaire, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'raises error if questionnaire is not GroupDocs::Questionnaire object' do
- lambda { subject.create_questionnaire!('Questionnaire') }.should raise_error(ArgumentError)
- end
-
- it 'returns GroupDocs::Questionnaire object' do
- subject.create_questionnaire!(questionnaire).should be_a(GroupDocs::Questionnaire)
- end
-
- it 'uses hashed version of questionnaire as request body' do
- questionnaire.should_receive(:to_hash)
- subject.create_questionnaire!(questionnaire)
- end
-
- it 'updates ID from response to questionnaire' do
- lambda do
- subject.create_questionnaire!(questionnaire)
- end.should change(questionnaire, :id)
- end
- end
-
- describe '#remove_questionnaire!' do
- before(:each) do
- mock_api_server('{ "status": "Ok", "result": {}}')
- end
-
- let(:questionnaire) do
- GroupDocs::Questionnaire.new(:id => 1)
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.remove_questionnaire!(questionnaire, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'raises error if questionnaire is not GroupDocs::Questionnaire object' do
- lambda { subject.remove_questionnaire!('Questionnaire') }.should raise_error(ArgumentError)
- end
- end
-
- describe '#datasource!' do
- before(:each) do
- mock_api_server(load_json('document_datasource'))
- end
-
- let(:datasource) do
- GroupDocs::DataSource.new(:id => 1)
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.datasource!(datasource, {}, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'accepts options hash' do
- lambda do
- subject.datasource!(datasource, :new_type => :pdf)
- end.should_not raise_error()
- end
-
- it 'raises error if datasource is not GroupDocs::Datasource object' do
- lambda { subject.datasource!('Datasource') }.should raise_error(ArgumentError)
- end
-
- it 'returns GroupDocs::Job object' do
- job = subject.datasource!(datasource)
- job.should be_a(GroupDocs::Job)
- end
- end
-
- describe '#annotations!' do
- before(:each) do
- mock_api_server(load_json('annotation_list'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.annotations!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns array of GroupDocs::Document::Annotation objects' do
- annotations = subject.annotations!
- annotations.should be_an(Array)
- annotations.each do |annotation|
- annotation.should be_a(GroupDocs::Document::Annotation)
- end
- end
-
- it 'returns empty array if annotations are null in response' do
- mock_api_server('{ "status": "Ok", "result": { "annotations": null }}')
- subject.annotations!.should be_empty
- end
- end
-
- describe '#details!' do
- before(:each) do
- mock_api_server(load_json('comparison_document'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.details!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns hash of document details' do
- subject.details!.should be_a(Hash)
- end
- end
-
- describe '#compare!' do
- before(:each) do
- mock_api_server(load_json('comparison_compare'))
- end
-
- let(:document) do
- GroupDocs::Document.new(:file => GroupDocs::Storage::File.new)
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.compare!(document, 'callback', :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'raises error if document is not GroupDocs::Document object' do
- lambda { subject.compare!('Document') }.should raise_error(ArgumentError)
- end
-
- it 'returns GroupDocs::Job object' do
- subject.compare!(document, 'callback').should be_a(GroupDocs::Job)
- end
- end
-
- describe '#changes!' do
- before(:each) do
- mock_api_server(load_json('comparison_changes'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.changes!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns array of GroupDocs::Document::Change objects' do
- changes = subject.changes!
- changes.should be_an(Array)
- changes.each do |change|
- change.should be_a(GroupDocs::Document::Change)
- end
- end
- end
-
-
- describe '#collaborators!' do
- before(:each) do
- mock_api_server(load_json('annotation_collaborators_get'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.collaborators!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'returns an array of GroupDocs::User objects' do
- users = subject.collaborators!
- users.should be_an(Array)
- users.each do |user|
- user.should be_a(GroupDocs::User)
- end
- end
- end
-
- describe '#set_collaborators!' do
- before(:each) do
- mock_api_server(load_json('annotation_collaborators_set'))
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.set_collaborators!(%w(test1@email.com), 1, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'accepts version' do
- lambda do
- subject.set_collaborators!(%w(test1@email.com), 1)
- end.should_not raise_error()
- end
-
- it 'returns an array of GroupDocs::User objects' do
- users = subject.set_collaborators!(%w(test1@email.com))
- users.should be_an(Array)
- users.each do |user|
- user.should be_a(GroupDocs::User)
- end
- end
- end
-
- describe '#add_collaborator!' do
- before(:each) do
- mock_api_server(load_json('annotation_collaborators_get'))
- end
-
- let!(:collaborator) { GroupDocs::User.new }
-
- it 'accepts access credentials hash' do
- lambda do
- subject.add_collaborator!(collaborator, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'uses hashed version of collaborator as request body' do
- collaborator.should_receive(:to_hash)
- subject.add_collaborator! collaborator
- end
-
- it 'raises error if collaborator is not an instance of GroupDocs::User' do
- lambda { subject.add_collaborator!('collaborator') }.should raise_error(ArgumentError)
- end
- end
-
- describe '#set_reviewers!' do
- before(:each) do
- mock_api_server('{ "status": "Ok", "result": {}}')
- end
-
- let!(:reviewers) { [GroupDocs::User.new, GroupDocs::User.new] }
-
- it 'accepts access credentials hash' do
- lambda do
- subject.set_reviewers!(reviewers, :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'uses hashed version of each reviewer as request body' do
- reviewers.each do |reviewer|
- reviewer.should_receive(:to_hash)
- end
- subject.set_reviewers! reviewers
- end
- end
-
- describe '#shared_link_access_rights!' do
- before(:each) do
- mock_api_server('{ "status": "Ok", "result": { "accessRights": 15 }}')
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.shared_link_access_rights!(:client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'converts response byte flag into array of access rights' do
- subject.should_receive(:convert_byte_to_access_rights).with(15)
- subject.shared_link_access_rights!
- end
-
- it 'returns array of access rights symbols' do
- access_rights = subject.shared_link_access_rights!
- access_rights.should be_an(Array)
- access_rights.each do |access_right|
- access_right.should be_a(Symbol)
- end
- end
-
- it 'returns empty array if access rights is null' do
- mock_api_server('{ "status": "Ok", "result": { "accessRights": null }}')
- subject.shared_link_access_rights!.should be_empty
- end
- end
-
- describe '#set_shared_link_access_rights!' do
- before(:each) do
- mock_api_server('{ "status": "Ok", "result": {}}')
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.set_shared_link_access_rights!(%w(view), :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
-
- it 'converts array of access rights into byte flag' do
- subject.should_receive(:convert_access_rights_to_byte).with(%w(view))
- subject.set_shared_link_access_rights! %w(view)
- end
- end
-
- describe '#set_session_callback!' do
- before(:each) do
- mock_api_server('{ "status": "Ok", "result": {}}')
- end
-
- it 'accepts access credentials hash' do
- lambda do
- subject.set_session_callback!('http://www.example.com', :client_id => 'client_id', :private_key => 'private_key')
- end.should_not raise_error()
- end
- end
-
- describe '#method_missing' do
- it 'passes unknown methods to file object' do
- lambda { subject.name }.should_not raise_error()
- end
-
- it 'raises NoMethodError if neither self nor file responds to method' do
- lambda { subject.unknown_method }.should raise_error(NoMethodError)
- end
- end
-
- describe '#respond_to?' do
- it 'returns true if self responds to method' do
- subject.respond_to?(:metadata!).should be_truthy
- end
-
- it 'returns true if file object responds to method' do
- subject.respond_to?(:name).should be_truthy
- end
-
- it 'returns false if neither self nor file responds to method' do
- subject.respond_to?(:unknown).should be_falsey
- end
- end
-end
+require 'spec_helper'
+
+describe GroupDocs::Document do
+
+ it_behaves_like GroupDocs::Api::Entity
+ include_examples GroupDocs::Api::Helpers::Status
+
+ subject do
+ file = GroupDocs::Storage::File.new
+ described_class.new(:file => file)
+ end
+
+ describe '.views!' do
+ before(:each) do
+ mock_api_server(load_json('document_views'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ described_class.views!({}, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns an array of GroupDocs::Document::View objects' do
+ views = described_class.views!
+ views.should be_an(Array)
+ views.each do |view|
+ view.should be_a(GroupDocs::Document::View)
+ end
+ end
+ end
+
+ describe '.templates!' do
+ before(:each) do
+ mock_api_server(load_json('templates_get'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ described_class.templates!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns an array of GroupDocs::Document objects' do
+ templates = described_class.templates!
+ templates.should be_an(Array)
+ templates.each do |template|
+ template.should be_a(GroupDocs::Document)
+ end
+ end
+ end
+
+ describe '.sign_documents!' do
+ before(:each) do
+ mock_api_server(load_json('sign_documents'))
+ end
+
+ let(:documents) do
+ [GroupDocs::Document.new(:file => GroupDocs::Storage::File.new(:name => 'Document1', :local_path => __FILE__)),
+ GroupDocs::Document.new(:file => GroupDocs::Storage::File.new(:name => 'Document2', :local_path => 'spec/support/files/resume.pdf'))]
+ end
+ let(:signatures) { [GroupDocs::Signature.new(:name => 'John Smith', :image_path => 'spec/support/files/signature.png', :position => {})] }
+
+ it 'accepts access credentials hash' do
+ lambda do
+ described_class.sign_documents!(documents, signatures, {}, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'raises error if document is not GroupDocs::Document object' do
+ lambda { described_class.sign_documents!(['Document'], signatures) }.should raise_error(ArgumentError)
+ end
+
+ it 'raises error if document file does not have name' do
+ documents = [GroupDocs::Document.new(:file => GroupDocs::Storage::File.new(:local_path => __FILE__))]
+ lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
+ end
+
+ it 'raises error if document file does not have local path' do
+ documents = [GroupDocs::Document.new(:file => GroupDocs::Storage::File.new(:name => 'Document'))]
+ lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
+ end
+
+ it 'raises error if signature is not GroupDocs::Signature object' do
+ lambda { described_class.sign_documents!(documents, ['Signature']) }.should raise_error(ArgumentError)
+ end
+
+ it 'raises error if signature does not have name' do
+ signatures = [GroupDocs::Signature.new(:image_path => __FILE__, :position => {})]
+ lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
+ end
+
+ it 'raises error if signature does not have image path' do
+ signatures = [GroupDocs::Signature.new(:name => 'John Smith', :position => {})]
+ lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
+ end
+
+ it 'raises error if signature does not have position' do
+ signatures = [GroupDocs::Signature.new(:name => 'John Smith', :image_path => __FILE__)]
+ lambda { described_class.sign_documents!(documents, signatures) }.should raise_error(ArgumentError)
+ end
+
+ it 'detects each document and signature file MIME type' do
+ documents.each { |document| described_class.should_receive(:mime_type).with(document.file.local_path).once }
+ signatures.each { |signature| described_class.should_receive(:mime_type).with(signature.image_path).once }
+ described_class.sign_documents!(documents, signatures)
+ end
+
+
+ end
+
+ describe ',metadata!' do
+ before(:each) do
+ mock_api_server(load_json('document_metadata'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ described_class.metadata!('document_one.doc', :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns GroupDocs::Document::MetaData object' do
+ described_class.metadata!('document_one.doc').should be_a(GroupDocs::Document::MetaData)
+ end
+
+ it 'sets last view as GroupDocs::Document::View object if document was viewed at least once' do
+ described_class.metadata!('document_one.doc').last_view.should be_a(GroupDocs::Document::View)
+ end
+
+ it 'does not set last view if document has never been viewed' do
+ mock_api_server('{ "status": "Ok", "result": { "last_view": null }}')
+ described_class.metadata!('document_one.doc').last_view.should be_nil
+ end
+ end
+
+ it { should have_accessor(:file) }
+ it { should have_accessor(:process_date) }
+ it { should have_accessor(:outputs) }
+ it { should have_accessor(:output_formats) }
+ it { should have_accessor(:order) }
+ it { should have_accessor(:field_count) }
+ it { should have_accessor(:news_enabled) }
+ it { should have_accessor(:alerts_enabled) }
+ it { should have_accessor(:support_enabled) }
+ it { should have_accessor(:is_real_time_broadcast_enabled) }
+ it { should have_accessor(:is_scroll_broadcast_enabled) }
+ it { should have_accessor(:is_zoom_broadcast_enabled) }
+ it { should have_accessor(:is_annotation_navigation_widget_enabled) }
+ it { should have_accessor(:is_annotation_zoom_widget_enabled) }
+ it { should have_accessor(:is_annotation_download_widget_enabled) }
+ it { should have_accessor(:is_annotation_print_widget_enabled) }
+ it { should have_accessor(:is_annotation_help_widget_enabled) }
+ it { should have_accessor(:is_right_panel_enabled) }
+ it { should have_accessor(:is_thumbnails_panel_enabled) }
+ it { should have_accessor(:is_toolbar_enabled) }
+ it { should have_accessor(:is_text_annotation_button_enabled) }
+ it { should have_accessor(:is_rectangle_annotation_button_enabled) }
+ it { should have_accessor(:is_point_annotation_button_enabled) }
+ it { should have_accessor(:is_strikeout_annotation_button_enabled) }
+ it { should have_accessor(:is_polyline_annotation_button_enabled) }
+ it { should have_accessor(:is_typewriter_annotation_button_enabled) }
+ it { should have_accessor(:is_watermark_annotation_button_enabled) }
+ it { should have_accessor(:is_viewer_navigation_widget_enabled) }
+ it { should have_accessor(:is_viewer_zoom_widget_enabled) }
+ it { should have_accessor(:is_viewer_download_widget_enabled) }
+ it { should have_accessor(:is_viewer_print_widget_enabled) }
+ it { should have_accessor(:is_viewer_help_widget_enabled) }
+ it { should have_accessor(:is_standard_header_always_shown) }
+ it { should have_accessor(:is_annotation_document_name_shown) }
+ it { should have_accessor(:is_viewer_document_name_shown) }
+
+ it { should have_alias(:access_mode=, :access_mode_set!) }
+
+ describe '#outputs=' do
+ let(:response) do
+ [
+ { :ftype => 1, :guid => 'fhy9yh94u238dgf' },
+ { :ftype => 2, :guid => 'ofh9rhy9rfohf9s' }
+ ]
+ end
+
+ it 'saves outputs as array of GroupDocs::Storage::File objects' do
+ subject.outputs = response
+ outputs = subject.outputs
+ outputs.should be_an(Array)
+ outputs.each do |output|
+ output.should be_a(GroupDocs::Storage::File)
+ end
+ end
+
+ it 'does nothing if nil is passed' do
+ lambda do
+ subject.outputs = nil
+ end.should_not change(subject, :outputs)
+ end
+ end
+
+ describe '#output_formats' do
+ it 'returns parsed array of output formats' do
+ subject.output_formats = "pdf,tiff,doc"
+ subject.output_formats.should == [:pdf, :tiff, :doc]
+ end
+ end
+
+ describe '#process_date' do
+ it 'returns converted to Time object Unix timestamp' do
+ subject.process_date = 1330450135000
+ subject.process_date.should == Time.at(1330450135)
+ end
+ end
+
+ describe '#initialize' do
+ it 'raises error if file is not specified' do
+ lambda { described_class.new }.should raise_error(ArgumentError)
+ end
+
+ it 'raises error if file is not an instance of GroupDocs::Storage::File' do
+ lambda { described_class.new(:file => '') }.should raise_error(ArgumentError)
+ end
+ end
+
+ describe '#page_images!' do
+ before(:each) do
+ mock_api_server(load_json('document_page_images_get'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.page_images!(640, 480, {}, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'accepts options hash' do
+ lambda do
+ subject.page_images!(640, 480, :first_page => 0, :page_count => 1)
+ end.should_not raise_error()
+ end
+
+ it 'returns array of URLs' do
+ urls = subject.page_images!(640, 480)
+ urls.should be_an(Array)
+ urls.each do |url|
+ url.should be_a(String)
+ end
+ end
+ end
+
+ describe '#thumbnails!' do
+ before(:each) do
+ mock_api_server(load_json('document_thumbnails'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.thumbnails!({}, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'accepts options hash' do
+ lambda do
+ subject.thumbnails!(:page_number => 0, :page_count => 1)
+ end.should_not raise_error()
+ end
+
+ it 'returns array of URLs' do
+ urls = subject.thumbnails!
+ urls.should be_an(Array)
+ urls.each do |url|
+ url.should be_a(String)
+ end
+ end
+ end
+
+ describe '#access_mode!' do
+ before(:each) do
+ mock_api_server(load_json('document_access_info_get'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.access_mode!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns access mode in human readable presentation' do
+ subject.should_receive(:parse_access_mode).with('Private').and_return(:private)
+ subject.access_mode!.should == :private
+ end
+ end
+
+ describe '#access_mode_set!' do
+ before(:each) do
+ mock_api_server('{"status": "Ok", "result": {"access": "Private" }}')
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.access_mode_set!(:private, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'sets corresponding access mode' do
+ described_class::ACCESS_MODES.should_receive(:[]).with(:private).and_return(0)
+ subject.should_receive(:parse_access_mode).with('Private').and_return(:private)
+ subject.access_mode_set!(:private)
+ end
+
+ it 'returns set of access modes' do
+ subject.access_mode_set!(:private).should == :private
+ end
+
+ it 'is aliased to #access_mode=' do
+ subject.should have_alias(:access_mode=, :access_mode_set!)
+ end
+ end
+
+ describe '#formats!' do
+ before(:each) do
+ mock_api_server(load_json('document_formats'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.formats!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns an array of symbols' do
+ formats = subject.formats!
+ formats.should be_an(Array)
+ formats.each do |format|
+ format.should be_a(Symbol)
+ end
+ end
+ end
+
+ describe '#metadata!' do
+ before(:each) do
+ mock_api_server(load_json('document_metadata'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.metadata!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns GroupDocs::Document::MetaData object' do
+ subject.metadata!.should be_a(GroupDocs::Document::MetaData)
+ end
+
+ it 'sets last view as GroupDocs::Document::View object if document was viewed at least once' do
+ subject.metadata!.last_view.should be_a(GroupDocs::Document::View)
+ end
+
+ it 'uses self document in last view object' do
+ subject.metadata!.last_view.document.should be_a(GroupDocs::Document)
+ end
+
+ it 'does not set last view if document has never been viewed' do
+ mock_api_server('{ "status": "Ok", "result": { "last_view": null }}')
+ subject.metadata!.last_view.should be_nil
+ end
+ end
+
+ describe '#fields!' do
+ before(:each) do
+ mock_api_server(load_json('document_fields'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.fields!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns array of GroupDocs::Document::Field objects' do
+ fields = subject.fields!
+ fields.should be_an(Array)
+ fields.each do |field|
+ field.should be_a(GroupDocs::Document::Field)
+ end
+ end
+ end
+
+ describe '#sharers!' do
+ before(:each) do
+ mock_api_server(load_json('document_access_info_get'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.sharers!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns an array of GroupDocs::User objects' do
+ users = subject.sharers!
+ users.should be_an(Array)
+ users.each do |user|
+ user.should be_a(GroupDocs::User)
+ end
+ end
+ end
+
+ describe '#sharers_set!' do
+ before(:each) do
+ mock_api_server(load_json('document_sharers_set'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.sharers_set!(%w(test1@email.com), :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns an array of GroupDocs::User objects' do
+ users = subject.sharers_set!(%w(test1@email.com))
+ users.should be_an(Array)
+ users.each do |user|
+ user.should be_a(GroupDocs::User)
+ end
+ end
+
+ it 'clears sharers if empty array is passed' do
+ subject.should_receive(:sharers_clear!)
+ subject.sharers_set!([])
+ end
+
+ it 'clears sharers if nil is passed' do
+ subject.should_receive(:sharers_clear!)
+ subject.sharers_set!(nil)
+ end
+ end
+
+ describe '#sharers_clear!' do
+ before(:each) do
+ mock_api_server(load_json('document_sharers_remove'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.sharers_clear!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'clears sharers list and returns nil' do
+ subject.sharers_clear!.should be_nil
+ end
+ end
+
+ describe '#convert!' do
+ before(:each) do
+ mock_api_server(load_json('document_convert'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.convert!(:pdf, {}, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'accepts options hash' do
+ lambda do
+ subject.convert!(:pdf, :email_results => true)
+ end.should_not raise_error()
+ end
+
+ it 'returns GroupDocs::Job object' do
+ subject.convert!(:pdf).should be_a(GroupDocs::Job)
+ end
+ end
+
+ describe '#questionnaires!' do
+ before(:each) do
+ mock_api_server(load_json('document_questionnaires'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.questionnaires!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns an array of GroupDocs::Questionnaire objects' do
+ questionnaires = subject.questionnaires!
+ questionnaires.should be_an(Array)
+ questionnaires.each do |questionnaire|
+ questionnaire.should be_a(GroupDocs::Questionnaire)
+ end
+ end
+ end
+
+ describe '#add_questionnaire!' do
+ before(:each) do
+ mock_api_server('{ "status": "Ok", "result": {}}')
+ end
+
+ let(:questionnaire) do
+ GroupDocs::Questionnaire.new(:id => 1)
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.add_questionnaire!(questionnaire, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'raises error if questionnaire is not GroupDocs::Questionnaire object' do
+ lambda { subject.add_questionnaire!('Questionnaire') }.should raise_error(ArgumentError)
+ end
+ end
+
+ describe '#create_questionnaire!' do
+ before(:each) do
+ mock_api_server(load_json('document_questionnaire_create'))
+ end
+
+ let(:questionnaire) do
+ GroupDocs::Questionnaire.new(:name => 'Q1')
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.create_questionnaire!(questionnaire, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'raises error if questionnaire is not GroupDocs::Questionnaire object' do
+ lambda { subject.create_questionnaire!('Questionnaire') }.should raise_error(ArgumentError)
+ end
+
+ it 'returns GroupDocs::Questionnaire object' do
+ subject.create_questionnaire!(questionnaire).should be_a(GroupDocs::Questionnaire)
+ end
+
+ it 'uses hashed version of questionnaire as request body' do
+ questionnaire.should_receive(:to_hash)
+ subject.create_questionnaire!(questionnaire)
+ end
+
+ it 'updates ID from response to questionnaire' do
+ lambda do
+ subject.create_questionnaire!(questionnaire)
+ end.should change(questionnaire, :id)
+ end
+ end
+
+ describe '#remove_questionnaire!' do
+ before(:each) do
+ mock_api_server('{ "status": "Ok", "result": {}}')
+ end
+
+ let(:questionnaire) do
+ GroupDocs::Questionnaire.new(:id => 1)
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.remove_questionnaire!(questionnaire, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'raises error if questionnaire is not GroupDocs::Questionnaire object' do
+ lambda { subject.remove_questionnaire!('Questionnaire') }.should raise_error(ArgumentError)
+ end
+ end
+
+ describe '#datasource!' do
+ before(:each) do
+ mock_api_server(load_json('document_datasource'))
+ end
+
+ let(:datasource) do
+ GroupDocs::DataSource.new(:id => 1)
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.datasource!(datasource, {}, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'accepts options hash' do
+ lambda do
+ subject.datasource!(datasource, :new_type => :pdf)
+ end.should_not raise_error()
+ end
+
+ it 'raises error if datasource is not GroupDocs::Datasource object' do
+ lambda { subject.datasource!('Datasource') }.should raise_error(ArgumentError)
+ end
+
+ it 'returns GroupDocs::Job object' do
+ job = subject.datasource!(datasource)
+ job.should be_a(GroupDocs::Job)
+ end
+ end
+
+ describe '#annotations!' do
+ before(:each) do
+ mock_api_server(load_json('annotation_list'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.annotations!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns array of GroupDocs::Document::Annotation objects' do
+ annotations = subject.annotations!
+ annotations.should be_an(Array)
+ annotations.each do |annotation|
+ annotation.should be_a(GroupDocs::Document::Annotation)
+ end
+ end
+
+ it 'returns empty array if annotations are null in response' do
+ mock_api_server('{ "status": "Ok", "result": { "annotations": null }}')
+ subject.annotations!.should be_empty
+ end
+ end
+
+ describe '#details!' do
+ before(:each) do
+ mock_api_server(load_json('comparison_document'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.details!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns hash of document details' do
+ subject.details!.should be_a(Hash)
+ end
+ end
+
+ describe '#compare!' do
+ before(:each) do
+ mock_api_server(load_json('comparison_compare'))
+ end
+
+ let(:document) do
+ GroupDocs::Document.new(:file => GroupDocs::Storage::File.new)
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.compare!(document, 'callback', :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'raises error if document is not GroupDocs::Document object' do
+ lambda { subject.compare!('Document') }.should raise_error(ArgumentError)
+ end
+
+ it 'returns GroupDocs::Job object' do
+ subject.compare!(document, 'callback').should be_a(GroupDocs::Job)
+ end
+ end
+
+ describe '#changes!' do
+ before(:each) do
+ mock_api_server(load_json('comparison_changes'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.changes!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns array of GroupDocs::Document::Change objects' do
+ changes = subject.changes!
+ changes.should be_an(Array)
+ changes.each do |change|
+ change.should be_a(GroupDocs::Document::Change)
+ end
+ end
+ end
+
+
+ describe '#collaborators!' do
+ before(:each) do
+ mock_api_server(load_json('annotation_collaborators_get'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.collaborators!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'returns an array of GroupDocs::User objects' do
+ users = subject.collaborators!
+ users.should be_an(Array)
+ users.each do |user|
+ user.should be_a(GroupDocs::User)
+ end
+ end
+ end
+
+ describe '#set_collaborators!' do
+ before(:each) do
+ mock_api_server(load_json('annotation_collaborators_set'))
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.set_collaborators!(%w(test1@email.com), 1, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'accepts version' do
+ lambda do
+ subject.set_collaborators!(%w(test1@email.com), 1)
+ end.should_not raise_error()
+ end
+
+ it 'returns an array of GroupDocs::User objects' do
+ users = subject.set_collaborators!(%w(test1@email.com))
+ users.should be_an(Array)
+ users.each do |user|
+ user.should be_a(GroupDocs::User)
+ end
+ end
+ end
+
+ describe '#add_collaborator!' do
+ before(:each) do
+ mock_api_server(load_json('annotation_collaborators_get'))
+ end
+
+ let!(:collaborator) { GroupDocs::User.new }
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.add_collaborator!(collaborator, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'uses hashed version of collaborator as request body' do
+ collaborator.should_receive(:to_hash)
+ subject.add_collaborator! collaborator
+ end
+
+ it 'raises error if collaborator is not an instance of GroupDocs::User' do
+ lambda { subject.add_collaborator!('collaborator') }.should raise_error(ArgumentError)
+ end
+ end
+
+ describe '#set_reviewers!' do
+ before(:each) do
+ mock_api_server('{ "status": "Ok", "result": {}}')
+ end
+
+ let!(:reviewers) { [GroupDocs::User.new, GroupDocs::User.new] }
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.set_reviewers!(reviewers, :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'uses hashed version of each reviewer as request body' do
+ reviewers.each do |reviewer|
+ reviewer.should_receive(:to_hash)
+ end
+ subject.set_reviewers! reviewers
+ end
+ end
+
+ describe '#shared_link_access_rights!' do
+ before(:each) do
+ mock_api_server('{ "status": "Ok", "result": { "accessRights": 15 }}')
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.shared_link_access_rights!(:client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'converts response byte flag into array of access rights' do
+ subject.should_receive(:convert_byte_to_access_rights).with(15)
+ subject.shared_link_access_rights!
+ end
+
+ it 'returns array of access rights symbols' do
+ access_rights = subject.shared_link_access_rights!
+ access_rights.should be_an(Array)
+ access_rights.each do |access_right|
+ access_right.should be_a(Symbol)
+ end
+ end
+
+ it 'returns empty array if access rights is null' do
+ mock_api_server('{ "status": "Ok", "result": { "accessRights": null }}')
+ subject.shared_link_access_rights!.should be_empty
+ end
+ end
+
+ describe '#set_shared_link_access_rights!' do
+ before(:each) do
+ mock_api_server('{ "status": "Ok", "result": {}}')
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.set_shared_link_access_rights!(%w(view), :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+
+ it 'converts array of access rights into byte flag' do
+ subject.should_receive(:convert_access_rights_to_byte).with(%w(view))
+ subject.set_shared_link_access_rights! %w(view)
+ end
+ end
+
+ describe '#set_session_callback!' do
+ before(:each) do
+ mock_api_server('{ "status": "Ok", "result": {}}')
+ end
+
+ it 'accepts access credentials hash' do
+ lambda do
+ subject.set_session_callback!('http://www.example.com', :client_id => 'client_id', :private_key => 'private_key')
+ end.should_not raise_error()
+ end
+ end
+
+ describe '#method_missing' do
+ it 'passes unknown methods to file object' do
+ lambda { subject.name }.should_not raise_error()
+ end
+
+ it 'raises NoMethodError if neither self nor file responds to method' do
+ lambda { subject.unknown_method }.should raise_error(NoMethodError)
+ end
+ end
+
+ describe '#respond_to?' do
+ it 'returns true if self responds to method' do
+ subject.respond_to?(:metadata!).should be_truthy
+ end
+
+ it 'returns true if file object responds to method' do
+ subject.respond_to?(:name).should be_truthy
+ end
+
+ it 'returns false if neither self nor file responds to method' do
+ subject.respond_to?(:unknown).should be_falsey
+ end
+ end
+end