Skip to content

Commit 07814f0

Browse files
committed
Merge pull request #1 from engineyard/signups
create signup endpoint
2 parents 41c1f51 + 5116f03 commit 07814f0

File tree

4 files changed

+108
-2
lines changed

4 files changed

+108
-2
lines changed

lib/ey-core/client.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ class Ey::Core::Client < Cistern::Service
296296
request :reboot_server
297297
request :run_cluster_component_action
298298
request :run_environment_application_action
299+
request :signup
299300
request :update_addon
300301
request :update_addon_attachment
301302
request :update_alert

lib/ey-core/requests/signup.rb

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
class Ey::Core::Client
2+
class Real
3+
def signup(_params)
4+
params = Cistern::Hash.stringify_keys(_params)
5+
6+
request(
7+
:method => :post,
8+
:path => "/signups",
9+
:params => params,
10+
)
11+
end
12+
end # Real
13+
14+
class Mock
15+
def signup(_params)
16+
if self.authentication != :hmac
17+
response(status: 403)
18+
end
19+
20+
params = Cistern::Hash.stringify_keys(_params)
21+
22+
user_id = self.uuid
23+
24+
user = params["user"].dup
25+
user.merge!({
26+
"id" => user_id,
27+
"accounts" => url_for("/users/#{user_id}/accounts"),
28+
"memberships" => url_for("/users/#{user_id}/memberships"),
29+
"keypairs" => url_for("/users/#{user_id}/keypairs"),
30+
"token" => SecureRandom.hex(20)
31+
})
32+
33+
self.data[:users][user_id] = user
34+
35+
account_id = self.uuid
36+
37+
account = mock_account_setup(account_id, params["account"].dup)
38+
39+
self.data[:accounts][account_id] = account.merge(:account_users => [user_id], :account_owners => [user_id])
40+
41+
(params["features"] || []).each do |resource_id|
42+
feature = self.data[:features][resource_id]
43+
44+
account_url = url_for("/accounts/#{account_id}")
45+
feature["account"] = account_url
46+
end
47+
48+
response(
49+
:body => {
50+
"signup" => {
51+
"user_id" => user_id,
52+
"account_id" => account_id,
53+
},
54+
},
55+
:status => 201,
56+
)
57+
end
58+
end # Mock
59+
end # Ey::Core::Client

spec/accounts_spec.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@
2727
it "should create an account" do
2828
name = Faker::Name.first_name
2929

30-
account = hmac_client.accounts.create!(owner: user, name: name, signup_via: "deis")
30+
account = hmac_client.accounts.create!(owner: user, name: name)
31+
32+
# signup_via is foyer only
33+
# account = hmac_client.accounts.create!(owner: user, name: name, signup_via: "deis")
34+
# expect(account.signup_via).to eq("deis")
3135

3236
expect(account.name).to eq(name)
3337
expect(account.support_plan).to eq("standard")
34-
expect(account.signup_via).to eq("deis")
3538

3639
users = account.users.all
3740
expect(users.size).to eq(1)

spec/signups_spec.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
require 'spec_helper'
2+
3+
describe 'signups' do
4+
context "with a hmac client" do
5+
let!(:client) { create_hmac_client }
6+
7+
let!(:public_feature) do
8+
if Ey::Core::Client.mocking?
9+
client.create_feature(
10+
:id => "public_feature",
11+
:privacy => "public",
12+
:name => "A Public Feature",
13+
)
14+
else
15+
client.features.all.first
16+
end
17+
end
18+
19+
it "should create a user and account" do
20+
user_params = {
21+
:name => Faker::Name.name,
22+
:email => Faker::Internet.email,
23+
:password => SecureRandom.hex(8),
24+
}
25+
account_params = {
26+
:account_name => SecureRandom.hex(6),
27+
}
28+
features = [ public_feature.id ]
29+
30+
signup = client.signup(user: user_params, account: account_params, features: features).body["signup"]
31+
user = client.users.get(signup["user_id"])
32+
account = client.accounts.get(signup["account_id"])
33+
34+
expect(user.name).to eq(user_params[:name])
35+
expect(user.email).to eq(user_params[:email])
36+
37+
expect(account.name).to eq(account_params[:name])
38+
39+
expect(user.accounts).to contain_exactly(account)
40+
expect(account.features.map(&:id)).to include(*features)
41+
end
42+
end
43+
end

0 commit comments

Comments
 (0)