stormpath-sdk 0.4.0 → 1.0.0.beta
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.
- data/.gitignore +6 -0
 - data/.ruby-gemset +1 -0
 - data/.ruby-version +1 -0
 - data/.travis.yml +27 -0
 - data/CHANGES.md +21 -1
 - data/Gemfile +1 -2
 - data/README.md +457 -11
 - data/Rakefile +15 -1
 - data/lib/stormpath-sdk.rb +52 -33
 - data/lib/stormpath-sdk/{resource/group_list.rb → api_key.rb} +5 -9
 - data/lib/stormpath-sdk/auth/authentication_result.rb +3 -13
 - data/lib/stormpath-sdk/auth/basic_authenticator.rb +5 -11
 - data/lib/stormpath-sdk/auth/basic_login_attempt.rb +6 -8
 - data/lib/stormpath-sdk/auth/username_password_request.rb +2 -5
 - data/lib/stormpath-sdk/cache/cache.rb +54 -0
 - data/lib/stormpath-sdk/cache/cache_entry.rb +33 -0
 - data/lib/stormpath-sdk/cache/cache_manager.rb +22 -0
 - data/lib/stormpath-sdk/cache/cache_stats.rb +35 -0
 - data/lib/stormpath-sdk/cache/memory_store.rb +29 -0
 - data/lib/stormpath-sdk/cache/redis_store.rb +32 -0
 - data/lib/stormpath-sdk/client.rb +111 -0
 - data/lib/stormpath-sdk/data_store.rb +241 -0
 - data/lib/stormpath-sdk/{client/api_key.rb → error.rb} +16 -10
 - data/lib/stormpath-sdk/{util → ext}/hash.rb +1 -2
 - data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +8 -4
 - data/lib/stormpath-sdk/http/http_client_request_executor.rb +8 -7
 - data/lib/stormpath-sdk/http/request.rb +4 -8
 - data/lib/stormpath-sdk/{util/request_utils.rb → http/utils.rb} +17 -38
 - data/lib/stormpath-sdk/resource/account.rb +12 -108
 - data/lib/stormpath-sdk/resource/application.rb +35 -171
 - data/lib/stormpath-sdk/resource/associations.rb +97 -0
 - data/lib/stormpath-sdk/resource/base.rb +256 -0
 - data/lib/stormpath-sdk/resource/collection.rb +94 -0
 - data/lib/stormpath-sdk/resource/directory.rb +11 -68
 - data/lib/stormpath-sdk/resource/email_verification_token.rb +3 -9
 - data/lib/stormpath-sdk/resource/error.rb +4 -38
 - data/lib/stormpath-sdk/resource/expansion.rb +28 -0
 - data/lib/stormpath-sdk/resource/group.rb +8 -66
 - data/lib/stormpath-sdk/resource/group_membership.rb +4 -55
 - data/lib/stormpath-sdk/resource/{application_list.rb → instance.rb} +7 -13
 - data/lib/stormpath-sdk/resource/password_reset_token.rb +5 -23
 - data/lib/stormpath-sdk/resource/status.rb +22 -28
 - data/lib/stormpath-sdk/resource/tenant.rb +5 -52
 - data/lib/stormpath-sdk/resource/utils.rb +43 -13
 - data/lib/stormpath-sdk/util/assert.rb +5 -15
 - data/lib/stormpath-sdk/version.rb +3 -3
 - data/spec/api_key_spec.rb +19 -0
 - data/spec/auth/basic_authenticator_spec.rb +25 -0
 - data/spec/auth/sauthc1_signer_spec.rb +42 -0
 - data/spec/cache/cache_entry_spec.rb +157 -0
 - data/spec/cache/cache_spec.rb +89 -0
 - data/spec/cache/cache_stats_spec.rb +106 -0
 - data/spec/client_spec.rb +538 -0
 - data/spec/data_store_spec.rb +130 -0
 - data/spec/resource/account_spec.rb +74 -0
 - data/spec/resource/application_spec.rb +148 -0
 - data/spec/resource/base_spec.rb +114 -0
 - data/spec/resource/collection_spec.rb +169 -0
 - data/spec/resource/directory_spec.rb +30 -0
 - data/spec/resource/expansion_spec.rb +100 -0
 - data/spec/resource/group_spec.rb +49 -0
 - data/spec/spec_helper.rb +135 -0
 - data/spec/support/resource_factory.rb +48 -0
 - data/spec/support/resource_matchers.rb +27 -0
 - data/spec/support/test_cache_stores.rb +9 -0
 - data/spec/support/test_request_executor.rb +11 -0
 - data/stormpath-sdk.gemspec +14 -4
 - data/support/api.rb +55 -0
 - metadata +214 -44
 - data/lib/stormpath-sdk/client/client.rb +0 -38
 - data/lib/stormpath-sdk/client/client_application.rb +0 -38
 - data/lib/stormpath-sdk/client/client_application_builder.rb +0 -351
 - data/lib/stormpath-sdk/client/client_builder.rb +0 -305
 - data/lib/stormpath-sdk/ds/data_store.rb +0 -210
 - data/lib/stormpath-sdk/ds/resource_factory.rb +0 -37
 - data/lib/stormpath-sdk/resource/account_list.rb +0 -32
 - data/lib/stormpath-sdk/resource/collection_resource.rb +0 -91
 - data/lib/stormpath-sdk/resource/directory_list.rb +0 -30
 - data/lib/stormpath-sdk/resource/group_membership_list.rb +0 -32
 - data/lib/stormpath-sdk/resource/instance_resource.rb +0 -28
 - data/lib/stormpath-sdk/resource/resource.rb +0 -327
 - data/lib/stormpath-sdk/resource/resource_error.rb +0 -47
 - data/test/client/client.yml +0 -16
 - data/test/client/client_application_builder_spec.rb +0 -114
 - data/test/client/client_builder_spec.rb +0 -176
 - data/test/client/read_spec.rb +0 -254
 - data/test/client/write_spec.rb +0 -420
 - data/test/resource/resource_spec.rb +0 -41
 - data/test/resource/test_resource.rb +0 -28
 
| 
         @@ -0,0 +1,169 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Stormpath::Resource::Collection do
         
     | 
| 
      
 4 
     | 
    
         
            +
              let(:href) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                'http://example.com'
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              let(:item_class) do
         
     | 
| 
      
 9 
     | 
    
         
            +
                Stormpath::Resource::Application
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              let(:client) do
         
     | 
| 
      
 13 
     | 
    
         
            +
                Stormpath::Client
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              describe '#collection_href' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                context 'by default' do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  let(:collection) do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    Stormpath::Resource::Collection.new href, item_class, client
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  it 'defaults to href' do
         
     | 
| 
      
 23 
     | 
    
         
            +
                    expect(collection.collection_href).to eq href
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                context 'when specified' do
         
     | 
| 
      
 28 
     | 
    
         
            +
                  let(:collection_href) do
         
     | 
| 
      
 29 
     | 
    
         
            +
                    'http://fakie.com'
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  let(:collection) do
         
     | 
| 
      
 33 
     | 
    
         
            +
                    Stormpath::Resource::Collection.new(
         
     | 
| 
      
 34 
     | 
    
         
            +
                      href, item_class, client,
         
     | 
| 
      
 35 
     | 
    
         
            +
                      collection_href: collection_href
         
     | 
| 
      
 36 
     | 
    
         
            +
                    )
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  it 'defaults to href' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                    expect(collection.collection_href).to eq collection_href
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              describe '#offset' do
         
     | 
| 
      
 46 
     | 
    
         
            +
                let(:collection) do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  Stormpath::Resource::Collection.new href, item_class, client
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                let!(:offset) do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  collection.offset 5
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                it 'returns the collection' do
         
     | 
| 
      
 55 
     | 
    
         
            +
                  expect(offset.class).to eq Stormpath::Resource::Collection
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                it 'adds the query to the criteria' do
         
     | 
| 
      
 59 
     | 
    
         
            +
                  expect(collection.criteria).to include offset: 5
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              describe '#limit' do
         
     | 
| 
      
 64 
     | 
    
         
            +
                let(:collection) do
         
     | 
| 
      
 65 
     | 
    
         
            +
                  Stormpath::Resource::Collection.new href, item_class, client
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                let!(:limit) do
         
     | 
| 
      
 69 
     | 
    
         
            +
                  collection.limit 100
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                it 'returns the collection' do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  expect(limit.class).to eq Stormpath::Resource::Collection
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                it 'adds the query param to the criteria' do
         
     | 
| 
      
 77 
     | 
    
         
            +
                  expect(collection.criteria).to include limit: 100
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
              describe '#order' do
         
     | 
| 
      
 82 
     | 
    
         
            +
                let(:collection) do
         
     | 
| 
      
 83 
     | 
    
         
            +
                  Stormpath::Resource::Collection.new href, item_class, client
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                let(:order_statement) do
         
     | 
| 
      
 87 
     | 
    
         
            +
                  'lastName asc,age desc'
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                let!(:order) do
         
     | 
| 
      
 91 
     | 
    
         
            +
                  collection.order order_statement
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                it 'returns the collection' do
         
     | 
| 
      
 95 
     | 
    
         
            +
                  expect(order.class).to eq Stormpath::Resource::Collection
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                it 'adds the query param to the criteria' do
         
     | 
| 
      
 99 
     | 
    
         
            +
                  expect(collection.criteria).to include order_by: order_statement
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
              end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
              describe '#search' do
         
     | 
| 
      
 104 
     | 
    
         
            +
                let(:collection) do
         
     | 
| 
      
 105 
     | 
    
         
            +
                  Stormpath::Resource::Collection.new href, item_class, client
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                context 'when passed a string' do
         
     | 
| 
      
 109 
     | 
    
         
            +
                  let(:query) do
         
     | 
| 
      
 110 
     | 
    
         
            +
                    'dagnabbit'
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  let!(:search) do
         
     | 
| 
      
 114 
     | 
    
         
            +
                    collection.search query
         
     | 
| 
      
 115 
     | 
    
         
            +
                  end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                  it 'returns the collection' do
         
     | 
| 
      
 118 
     | 
    
         
            +
                    expect(search.class).to eq Stormpath::Resource::Collection
         
     | 
| 
      
 119 
     | 
    
         
            +
                  end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                  it 'adds a "q" query string to the criteria' do
         
     | 
| 
      
 122 
     | 
    
         
            +
                    expect(collection.criteria).to include q: query
         
     | 
| 
      
 123 
     | 
    
         
            +
                  end
         
     | 
| 
      
 124 
     | 
    
         
            +
                end
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                context 'when passed a hash of attributes' do
         
     | 
| 
      
 127 
     | 
    
         
            +
                  let(:query_hash) do
         
     | 
| 
      
 128 
     | 
    
         
            +
                    { name: 'Stanley Kubrick', description: 'That dude was a sick maniac' }
         
     | 
| 
      
 129 
     | 
    
         
            +
                  end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                  let!(:search) do
         
     | 
| 
      
 132 
     | 
    
         
            +
                    collection.search query_hash
         
     | 
| 
      
 133 
     | 
    
         
            +
                  end
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                  it 'returns the collection' do
         
     | 
| 
      
 136 
     | 
    
         
            +
                    expect(search.class).to eq Stormpath::Resource::Collection
         
     | 
| 
      
 137 
     | 
    
         
            +
                  end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                  it 'adds a "q" query string to the criteria' do
         
     | 
| 
      
 140 
     | 
    
         
            +
                    expect(collection.criteria).to include query_hash
         
     | 
| 
      
 141 
     | 
    
         
            +
                  end
         
     | 
| 
      
 142 
     | 
    
         
            +
                end
         
     | 
| 
      
 143 
     | 
    
         
            +
              end
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
              describe '#criteria' do
         
     | 
| 
      
 146 
     | 
    
         
            +
                let(:collection) do
         
     | 
| 
      
 147 
     | 
    
         
            +
                  Stormpath::Resource::Collection.new href, item_class, client
         
     | 
| 
      
 148 
     | 
    
         
            +
                end
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                context 'when no fetch criteria present' do
         
     | 
| 
      
 151 
     | 
    
         
            +
                  it 'returns an empty hash for criteria' do
         
     | 
| 
      
 152 
     | 
    
         
            +
                    expect(collection.criteria).to be_empty
         
     | 
| 
      
 153 
     | 
    
         
            +
                  end
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                context 'when search, offset, limit and order by are chained' do
         
     | 
| 
      
 157 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 158 
     | 
    
         
            +
                    collection.search('Big up to Brooklyn').order('lastName asc').offset(15).limit 50
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
                  it 'has the search parameters' do
         
     | 
| 
      
 162 
     | 
    
         
            +
                    expect(collection.criteria).to include q: 'Big up to Brooklyn'
         
     | 
| 
      
 163 
     | 
    
         
            +
                    expect(collection.criteria).to include offset: 15
         
     | 
| 
      
 164 
     | 
    
         
            +
                    expect(collection.criteria).to include limit: 50
         
     | 
| 
      
 165 
     | 
    
         
            +
                    expect(collection.criteria).to include order_by: 'lastName asc'
         
     | 
| 
      
 166 
     | 
    
         
            +
                  end
         
     | 
| 
      
 167 
     | 
    
         
            +
                end
         
     | 
| 
      
 168 
     | 
    
         
            +
              end
         
     | 
| 
      
 169 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Stormpath::Resource::Directory, :vcr do
         
     | 
| 
      
 4 
     | 
    
         
            +
              describe '#create_account' do
         
     | 
| 
      
 5 
     | 
    
         
            +
                let(:directory) { test_directory }
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                context 'given a valid account' do
         
     | 
| 
      
 8 
     | 
    
         
            +
                  let(:account) do
         
     | 
| 
      
 9 
     | 
    
         
            +
                    Stormpath::Resource::Account.new({
         
     | 
| 
      
 10 
     | 
    
         
            +
                      email: "test@example.com",
         
     | 
| 
      
 11 
     | 
    
         
            +
                      given_name: 'Ruby SDK',
         
     | 
| 
      
 12 
     | 
    
         
            +
                      password: 'P@$$w0rd',
         
     | 
| 
      
 13 
     | 
    
         
            +
                      surname: 'SDK',
         
     | 
| 
      
 14 
     | 
    
         
            +
                      username: "username"
         
     | 
| 
      
 15 
     | 
    
         
            +
                    })
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  let(:created_account) { directory.create_account account, false }
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  after do
         
     | 
| 
      
 21 
     | 
    
         
            +
                    created_account.delete if created_account
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  it 'creates an account' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                    expect(created_account).to be
         
     | 
| 
      
 26 
     | 
    
         
            +
                    expect(created_account.username).to eq(account.username)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,100 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Stormpath::Resource::Expansion, :vcr do
         
     | 
| 
      
 4 
     | 
    
         
            +
              describe '#initialize' do
         
     | 
| 
      
 5 
     | 
    
         
            +
                context 'given a single property name' do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  let(:expansion) do
         
     | 
| 
      
 7 
     | 
    
         
            +
                    Stormpath::Resource::Expansion.new 'foo'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  it 'can be transmuted to a simple hash' do
         
     | 
| 
      
 11 
     | 
    
         
            +
                    expect(expansion.to_query).to eq({ expand: 'foo' })
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
                context 'given a list of property names' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  let(:expansion) do
         
     | 
| 
      
 16 
     | 
    
         
            +
                    Stormpath::Resource::Expansion.new 'foo', 'bar'
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  it 'can be transmuted to a simple hash' do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    expect(expansion.to_query).to eq({ expand: 'foo,bar' })
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                context 'given no arguments are passed to constructor' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                  let(:expansion) do
         
     | 
| 
      
 26 
     | 
    
         
            +
                    Stormpath::Resource::Expansion.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  it 'will transmute to an empty hash' do
         
     | 
| 
      
 30 
     | 
    
         
            +
                    expect(expansion.to_query).to be_nil
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              describe "#add_property" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                context 'given a simple property name' do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  let(:expansion) { Stormpath::Resource::Expansion.new }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 40 
     | 
    
         
            +
                    expansion.add_property :foo
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  it 'can be transmuted to a simple hash' do
         
     | 
| 
      
 44 
     | 
    
         
            +
                    expect(expansion.to_query).to eq({ expand: 'foo' })
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                context 'given two simple property names' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                  let(:expansion) { Stormpath::Resource::Expansion.new }
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 52 
     | 
    
         
            +
                    expansion.add_property :foo
         
     | 
| 
      
 53 
     | 
    
         
            +
                    expansion.add_property :bar
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  it 'can be transmuted to a simple hash' do
         
     | 
| 
      
 57 
     | 
    
         
            +
                    expect(expansion.to_query).to eq({ expand: 'foo,bar' })
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                context 'given a duplicate property name' do
         
     | 
| 
      
 62 
     | 
    
         
            +
                  let(:expansion) { Stormpath::Resource::Expansion.new }
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 65 
     | 
    
         
            +
                    expansion.add_property :foo
         
     | 
| 
      
 66 
     | 
    
         
            +
                    expansion.add_property :bar
         
     | 
| 
      
 67 
     | 
    
         
            +
                    expansion.add_property :bar
         
     | 
| 
      
 68 
     | 
    
         
            +
                  end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                  it 'will not duplicate the property' do
         
     | 
| 
      
 71 
     | 
    
         
            +
                    expect(expansion.to_query).to eq({ expand: 'foo,bar' })
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                context 'given a property name, offset, and limit' do
         
     | 
| 
      
 76 
     | 
    
         
            +
                  let(:expansion) { Stormpath::Resource::Expansion.new }
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 79 
     | 
    
         
            +
                    expansion.add_property :foo, offset: 5, limit: 100
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  it 'can be transmuted to a simple hash' do
         
     | 
| 
      
 83 
     | 
    
         
            +
                    expect(expansion.to_query).to eq({ expand: 'foo(offset:5,limit:100)' })
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                context 'given two calls to add the same property' do
         
     | 
| 
      
 88 
     | 
    
         
            +
                  let(:expansion) { Stormpath::Resource::Expansion.new }
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 91 
     | 
    
         
            +
                    expansion.add_property :foo, offset: 5, limit: 100
         
     | 
| 
      
 92 
     | 
    
         
            +
                    expansion.add_property :foo, offset: 25
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                  it 'allows the last call to win out over the first' do
         
     | 
| 
      
 96 
     | 
    
         
            +
                    expect(expansion.to_query).to eq({ expand: 'foo(offset:25)' })
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
      
 98 
     | 
    
         
            +
                end
         
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
      
 100 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Stormpath::Resource::Group, :vcr do
         
     | 
| 
      
 5 
     | 
    
         
            +
              describe '#add_account' do
         
     | 
| 
      
 6 
     | 
    
         
            +
                context "given an account" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  let(:directory) do
         
     | 
| 
      
 8 
     | 
    
         
            +
                    test_api_client.directories.create name: 'testDirectory'
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  let(:group) do
         
     | 
| 
      
 12 
     | 
    
         
            +
                    directory.groups.create name: 'someGroup'
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  let(:account) do
         
     | 
| 
      
 16 
     | 
    
         
            +
                    directory.accounts.create({
         
     | 
| 
      
 17 
     | 
    
         
            +
                      email: 'rubysdk@example.com',
         
     | 
| 
      
 18 
     | 
    
         
            +
                      given_name: 'Ruby SDK',
         
     | 
| 
      
 19 
     | 
    
         
            +
                      password: 'P@$$w0rd',
         
     | 
| 
      
 20 
     | 
    
         
            +
                      surname: 'SDK',
         
     | 
| 
      
 21 
     | 
    
         
            +
                      username: 'rubysdk'
         
     | 
| 
      
 22 
     | 
    
         
            +
                    })
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  let(:reloaded_account) do
         
     | 
| 
      
 26 
     | 
    
         
            +
                    test_api_client.accounts.get account.href
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  let(:reloaded_group) do
         
     | 
| 
      
 30 
     | 
    
         
            +
                    test_api_client.groups.get group.href
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 34 
     | 
    
         
            +
                    group.add_account account
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  after do
         
     | 
| 
      
 38 
     | 
    
         
            +
                    group.delete if group
         
     | 
| 
      
 39 
     | 
    
         
            +
                    directory.delete if directory
         
     | 
| 
      
 40 
     | 
    
         
            +
                    account.delete if account
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  it "adds the account to the group" do
         
     | 
| 
      
 44 
     | 
    
         
            +
                    found = reloaded_group.accounts.find { |a| a.href == account.href }
         
     | 
| 
      
 45 
     | 
    
         
            +
                    expect(found).to be
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,135 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Note: If SimpleCov starts after your application code is already loaded (via require),
         
     | 
| 
      
 2 
     | 
    
         
            +
            # it won't be able to track your files and their coverage! The SimpleCov.start must be
         
     | 
| 
      
 3 
     | 
    
         
            +
            # issued before any of your application code is required!
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'simplecov'
         
     | 
| 
      
 5 
     | 
    
         
            +
            SimpleCov.start
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            require 'stormpath-sdk'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'pry'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'pry-debugger'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'webmock/rspec'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'vcr'
         
     | 
| 
      
 12 
     | 
    
         
            +
            require_relative '../support/api.rb'
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            Dir['./spec/support/*.rb'].each { |file| require file }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            HIJACK_HTTP_REQUESTS_WITH_VCR = ENV['STORMPATH_SDK_TEST_ENVIRONMENT'] != 'CI'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            WebMock.allow_net_connect!
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            VCR.configure do |c|
         
     | 
| 
      
 21 
     | 
    
         
            +
              c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
         
     | 
| 
      
 22 
     | 
    
         
            +
              c.hook_into :webmock
         
     | 
| 
      
 23 
     | 
    
         
            +
              c.configure_rspec_metadata!
         
     | 
| 
      
 24 
     | 
    
         
            +
              c.ignore_request { |r| HIJACK_HTTP_REQUESTS_WITH_VCR != true }
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            module Stormpath
         
     | 
| 
      
 28 
     | 
    
         
            +
              module TestApiKeyHelpers
         
     | 
| 
      
 29 
     | 
    
         
            +
                TEST_ENV_REQUIRED_VARS = {
         
     | 
| 
      
 30 
     | 
    
         
            +
                  STORMPATH_SDK_TEST_API_KEY_ID: 'The id form your Stormpath API Key',
         
     | 
| 
      
 31 
     | 
    
         
            +
                  STORMPATH_SDK_TEST_API_KEY_SECRET: 'The secret from your Stormpath API Key',
         
     | 
| 
      
 32 
     | 
    
         
            +
                  STORMPATH_SDK_TEST_APPLICATION_URL: 'The REST URL of a Stormpath Application reserved for testing.',
         
     | 
| 
      
 33 
     | 
    
         
            +
                  STORMPATH_SDK_TEST_DIRECTORY_URL: 'The REST URL of a Stormpath Directory associated to the test Application.',
         
     | 
| 
      
 34 
     | 
    
         
            +
                  STORMPATH_SDK_TEST_DIRECTORY_WITH_VERIFICATION_URL: 'The REST URL of a Stormpath Directory configured for email verification, associated to the test Application.'
         
     | 
| 
      
 35 
     | 
    
         
            +
                }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def test_api_key_id
         
     | 
| 
      
 38 
     | 
    
         
            +
                  ENV['STORMPATH_SDK_TEST_API_KEY_ID']
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def test_api_key_secret
         
     | 
| 
      
 42 
     | 
    
         
            +
                  ENV['STORMPATH_SDK_TEST_API_KEY_SECRET']
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def test_directory_url
         
     | 
| 
      
 46 
     | 
    
         
            +
                  ENV['STORMPATH_SDK_TEST_DIRECTORY_URL']
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def test_directory_with_verification_url
         
     | 
| 
      
 50 
     | 
    
         
            +
                  ENV['STORMPATH_SDK_TEST_DIRECTORY_WITH_VERIFICATION_URL']
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                def test_application_url
         
     | 
| 
      
 54 
     | 
    
         
            +
                  ENV['STORMPATH_SDK_TEST_APPLICATION_URL']
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def test_api_key
         
     | 
| 
      
 58 
     | 
    
         
            +
                  Stormpath::ApiKey.new test_api_key_id,
         
     | 
| 
      
 59 
     | 
    
         
            +
                    test_api_key_secret
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                def test_api_client
         
     | 
| 
      
 63 
     | 
    
         
            +
                  Stormpath::Client.new api_key: test_api_key
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                def test_missing_env_vars
         
     | 
| 
      
 67 
     | 
    
         
            +
                  TEST_ENV_REQUIRED_VARS.reject do |var, message|
         
     | 
| 
      
 68 
     | 
    
         
            +
                    ENV[var.to_s]
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                def test_application
         
     | 
| 
      
 73 
     | 
    
         
            +
                  test_api_client.applications.get test_application_url
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                def test_directory
         
     | 
| 
      
 77 
     | 
    
         
            +
                  test_api_client.directories.get test_directory_url
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                def test_directory_with_verification
         
     | 
| 
      
 81 
     | 
    
         
            +
                  test_api_client.directories.get test_directory_with_verification_url
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
              end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
              module TestResourceHelpers
         
     | 
| 
      
 86 
     | 
    
         
            +
                def destroy_all_stormpath_test_resources
         
     | 
| 
      
 87 
     | 
    
         
            +
                  Stormpath::Support::Api.destroy_resources(
         
     | 
| 
      
 88 
     | 
    
         
            +
                    test_api_key_id, test_api_key_secret, test_application_url,
         
     | 
| 
      
 89 
     | 
    
         
            +
                    test_directory_url, test_directory_with_verification_url
         
     | 
| 
      
 90 
     | 
    
         
            +
                  )
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                def build_account(opts={})
         
     | 
| 
      
 94 
     | 
    
         
            +
                  opts.tap do |o|
         
     | 
| 
      
 95 
     | 
    
         
            +
                    o[:surname]    = (!opts[:surname].blank? && opts[:surname]) || 'surname'
         
     | 
| 
      
 96 
     | 
    
         
            +
                    o[:given_name] = (!opts[:given_name].blank? && opts[:given_name]) || 'givenname'
         
     | 
| 
      
 97 
     | 
    
         
            +
                    o[:username]   = (!opts[:username].blank? && opts[:username]) || 'username'
         
     | 
| 
      
 98 
     | 
    
         
            +
                    o[:password]   = (!opts[:password].blank? && opts[:password]) || 'P@$$w0rd'
         
     | 
| 
      
 99 
     | 
    
         
            +
                    o[:email]      = (!opts[:email].blank? && opts[:email]) || 'test@example.com'
         
     | 
| 
      
 100 
     | 
    
         
            +
                  end
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
              end
         
     | 
| 
      
 103 
     | 
    
         
            +
            end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
            RSpec.configure do |c|
         
     | 
| 
      
 106 
     | 
    
         
            +
              c.mock_with :rspec do |c|
         
     | 
| 
      
 107 
     | 
    
         
            +
                c.syntax = :expect
         
     | 
| 
      
 108 
     | 
    
         
            +
              end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
              c.expect_with :rspec do |c|
         
     | 
| 
      
 111 
     | 
    
         
            +
                c.syntax = :expect
         
     | 
| 
      
 112 
     | 
    
         
            +
              end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
              c.include Stormpath::TestApiKeyHelpers
         
     | 
| 
      
 115 
     | 
    
         
            +
              c.include Stormpath::TestResourceHelpers
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
              c.treat_symbols_as_metadata_keys_with_true_values = true
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
              c.before(:all) do
         
     | 
| 
      
 120 
     | 
    
         
            +
                unless test_missing_env_vars.empty?
         
     | 
| 
      
 121 
     | 
    
         
            +
                  set_up_message = "In order to run the specs of the Stormpath SDK you need to setup the following environment variables:\n\t"
         
     | 
| 
      
 122 
     | 
    
         
            +
                  set_up_message << test_missing_env_vars.map do |var, message|
         
     | 
| 
      
 123 
     | 
    
         
            +
                    "#{var.to_s} : #{message}"
         
     | 
| 
      
 124 
     | 
    
         
            +
                  end.join("\n\t")
         
     | 
| 
      
 125 
     | 
    
         
            +
                  set_up_message << "\nBe sure to configure these before running the specs again."
         
     | 
| 
      
 126 
     | 
    
         
            +
                  raise set_up_message
         
     | 
| 
      
 127 
     | 
    
         
            +
                end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                destroy_all_stormpath_test_resources unless HIJACK_HTTP_REQUESTS_WITH_VCR
         
     | 
| 
      
 130 
     | 
    
         
            +
              end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
              c.after(:all) do
         
     | 
| 
      
 133 
     | 
    
         
            +
                destroy_all_stormpath_test_resources unless HIJACK_HTTP_REQUESTS_WITH_VCR
         
     | 
| 
      
 134 
     | 
    
         
            +
              end
         
     | 
| 
      
 135 
     | 
    
         
            +
            end
         
     |