Skip to content

Commit

Permalink
Merge pull request #1081 from internetee/auction-integration
Browse files Browse the repository at this point in the history
Complete auction integration
  • Loading branch information
vohmar authored Feb 18, 2019
2 parents f1148bd + 446b9fb commit baa7beb
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 6 deletions.
6 changes: 4 additions & 2 deletions app/controllers/api/v1/auctions_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ def index
end

def show
auction = Auction.find_by(uuid: params[:uuid])
auction = Auction.find_by!(uuid: params[:uuid])
render json: serializable_hash(auction)
end

def update
auction = Auction.find_by(uuid: params[:uuid])
auction = Auction.find_by!(uuid: params[:uuid])

case params[:status]
when Auction.statuses[:awaiting_payment]
Expand All @@ -24,6 +24,8 @@ def update
auction.mark_as_payment_received
when Auction.statuses[:payment_not_received]
auction.mark_as_payment_not_received
when Auction.statuses[:domain_not_registered]
auction.mark_as_domain_not_registered
else
raise "Invalid status #{params[:status]}"
end
Expand Down
10 changes: 10 additions & 0 deletions app/models/auction.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ class Auction < ActiveRecord::Base
payment_received: 'payment_received',
payment_not_received: 'payment_not_received',
domain_registered: 'domain_registered',
domain_not_registered: 'domain_not_registered',
}

PENDING_STATUSES = [statuses[:started],
Expand Down Expand Up @@ -43,6 +44,15 @@ def mark_as_payment_not_received
end
end

def mark_as_domain_not_registered
self.status = self.class.statuses[:domain_not_registered]

transaction do
save!
restart
end
end

def domain_registrable?(registration_code = nil)
payment_received? && registration_code_matches?(registration_code)
end
Expand Down
2 changes: 1 addition & 1 deletion doc/api/v1/auctions.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Updates auction.
### Parameters
| Field name | Required | Type | Allowed values | Description |
| ---------- | -------- | ---- | -------------- | ----------- |
| status | no | String | "awaiting_payment", "no_bids", "payment_received", "payment_not_received"
| status | no | String | "awaiting_payment", "no_bids", "payment_received", "payment_not_received", "domain_not_registered"

## Request
```
Expand Down
8 changes: 7 additions & 1 deletion test/integration/api/v1/auctions/details_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,10 @@ def test_returns_auction_details
'status' => Auction.statuses[:no_bids] }), ActiveSupport::JSON
.decode(response.body)
end
end

def test_auction_not_found
assert_raises ActiveRecord::RecordNotFound do
get api_v1_auction_path('non-existing-uuid'), nil, 'Content-Type' => Mime::JSON.to_s
end
end
end
18 changes: 17 additions & 1 deletion test/integration/api/v1/auctions/update_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,15 @@ def test_restarts_an_auction_when_the_payment_is_not_received
assert DNS::DomainName.new('auction.test').at_auction?
end

def test_restarts_an_auction_when_domain_is_not_registered
@auction.update!(domain: 'auction.test', status: Auction.statuses[:payment_received])

patch api_v1_auction_path(@auction.uuid), { status: Auction.statuses[:domain_not_registered] }
.to_json, 'Content-Type' => Mime::JSON.to_s

assert DNS::DomainName.new('auction.test').at_auction?
end

def test_inaccessible_when_ip_address_is_not_allowed
ENV['auction_api_allowed_ips'] = ''

Expand All @@ -97,4 +106,11 @@ def test_inaccessible_when_ip_address_is_not_allowed

assert_response :unauthorized
end
end

def test_auction_not_found
assert_raises ActiveRecord::RecordNotFound do
patch api_v1_auction_path('non-existing-uuid'), { status: Auction.statuses[:no_bids] }.to_json,
'Content-Type' => Mime::JSON.to_s
end
end
end
24 changes: 23 additions & 1 deletion test/models/auction_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ def test_statuses
'awaiting_payment' => 'awaiting_payment',
'payment_received' => 'payment_received',
'payment_not_received' => 'payment_not_received',
'domain_registered' => 'domain_registered' }), Auction.statuses
'domain_registered' => 'domain_registered',
'domain_not_registered' => 'domain_not_registered' }), Auction.statuses
end

def test_selling_domain_starts_new_auction
Expand Down Expand Up @@ -95,6 +96,27 @@ def test_restarts_an_auction_when_payment_is_not_received
assert new_auction.started?
end

def test_marking_as_domain_not_registered
@auction.update!(status: Auction.statuses[:payment_received])

@auction.mark_as_domain_not_registered
@auction.reload

assert @auction.domain_not_registered?
end

def test_restarts_an_auction_when_domain_is_not_registered
@auction.update!(domain: 'auction.test', status: Auction.statuses[:domain_not_registered])

assert_difference 'Auction.count' do
@auction.mark_as_domain_not_registered
end

new_auction = Auction.last
assert_equal 'auction.test', new_auction.domain
assert new_auction.started?
end

def test_domain_registrable
assert @auction.no_bids?
assert_not @auction.domain_registrable?
Expand Down

0 comments on commit baa7beb

Please sign in to comment.