Skip to content

create signup endpoint #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 22, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/ey-core/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,7 @@ class Ey::Core::Client < Cistern::Service
request :reboot_server
request :run_cluster_component_action
request :run_environment_application_action
request :signup
request :update_addon
request :update_addon_attachment
request :update_alert
Expand Down
59 changes: 59 additions & 0 deletions lib/ey-core/requests/signup.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
class Ey::Core::Client
class Real
def signup(_params)
params = Cistern::Hash.stringify_keys(_params)

request(
:method => :post,
:path => "/signups",
:params => params,
)
end
end # Real

class Mock
def signup(_params)
if self.authentication != :hmac
response(status: 403)
end

params = Cistern::Hash.stringify_keys(_params)

user_id = self.uuid

user = params["user"].dup
user.merge!({
"id" => user_id,
"accounts" => url_for("/users/#{user_id}/accounts"),
"memberships" => url_for("/users/#{user_id}/memberships"),
"keypairs" => url_for("/users/#{user_id}/keypairs"),
"token" => SecureRandom.hex(20)
})

self.data[:users][user_id] = user

account_id = self.uuid

account = mock_account_setup(account_id, params["account"].dup)

self.data[:accounts][account_id] = account.merge(:account_users => [user_id], :account_owners => [user_id])

(params["features"] || []).each do |resource_id|
feature = self.data[:features][resource_id]

account_url = url_for("/accounts/#{account_id}")
feature["account"] = account_url
end

response(
:body => {
"signup" => {
"user_id" => user_id,
"account_id" => account_id,
},
},
:status => 201,
)
end
end # Mock
end # Ey::Core::Client
7 changes: 5 additions & 2 deletions spec/accounts_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,14 @@
it "should create an account" do
name = Faker::Name.first_name

account = hmac_client.accounts.create!(owner: user, name: name, signup_via: "deis")
account = hmac_client.accounts.create!(owner: user, name: name)

# signup_via is foyer only
# account = hmac_client.accounts.create!(owner: user, name: name, signup_via: "deis")
# expect(account.signup_via).to eq("deis")

expect(account.name).to eq(name)
expect(account.support_plan).to eq("standard")
expect(account.signup_via).to eq("deis")

users = account.users.all
expect(users.size).to eq(1)
Expand Down
43 changes: 43 additions & 0 deletions spec/signups_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
require 'spec_helper'

describe 'signups' do
context "with a hmac client" do
let!(:client) { create_hmac_client }

let!(:public_feature) do
if Ey::Core::Client.mocking?
client.create_feature(
:id => "public_feature",
:privacy => "public",
:name => "A Public Feature",
)
else
client.features.all.first
end
end

it "should create a user and account" do
user_params = {
:name => Faker::Name.name,
:email => Faker::Internet.email,
:password => SecureRandom.hex(8),
}
account_params = {
:account_name => SecureRandom.hex(6),
}
features = [ public_feature.id ]

signup = client.signup(user: user_params, account: account_params, features: features).body["signup"]
user = client.users.get(signup["user_id"])
account = client.accounts.get(signup["account_id"])

expect(user.name).to eq(user_params[:name])
expect(user.email).to eq(user_params[:email])

expect(account.name).to eq(account_params[:name])

expect(user.accounts).to contain_exactly(account)
expect(account.features.map(&:id)).to include(*features)
end
end
end