Skip to content
Open
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,5 @@ certs/ca/private/ca_*.pem
.cursorrules
certs/
Dockerfile.dev.v2
CLAUDE.md
.claude
17 changes: 11 additions & 6 deletions app/models/free_domain_reservation_holder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,17 @@ def reserved_domains
end

def output_reserved_domains
reserved_domains.map do |domain|
{
name: domain.name,
password: domain.password,
expire_at: domain.expire_at
}
domain_names.map do |name|
domain = ReservedDomain.find_by(name: name)
registered = Domain.exists?(name: name)

if registered
{ name: name, status: 'registered' }
elsif domain
{ name: name, password: domain.password, expire_at: domain.expire_at, status: 'reserved' }
else
{ name: name, status: 'expired' }
end
end
end

Expand Down
18 changes: 10 additions & 8 deletions app/models/reserve_domain_invoice.rb
Original file line number Diff line number Diff line change
Expand Up @@ -194,13 +194,15 @@ def create_paid_reserved_domains
def build_reserved_domains_output
domain_names.map do |name|
domain = ReservedDomain.find_by(name: name)
next unless domain

{
name: domain.name,
password: domain.password,
expire_at: domain.expire_at
}
end.compact
registered = Domain.exists?(name: name)

if registered
{ name: name, status: 'registered' }
elsif domain
{ name: name, password: domain.password, expire_at: domain.expire_at, status: 'reserved' }
else
{ name: name, status: 'expired' }
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,13 @@ def setup
assert_equal 'Payment received', json_response['message']

# Проверяем структуру reserved_domains
reserved_domain = json_response['reserved_domains'].first
reserved_domain = json_response['reserved_domains'].find { |d| d['status'] == 'reserved' }
assert_not_nil reserved_domain
assert_not_nil reserved_domain['name']
assert_not_nil reserved_domain['password']
assert_not_nil reserved_domain['expire_at']

assert_equal 'reserved', reserved_domain['status']

# Проверяем, что expire_at установлен на 1 год
expire_at = Time.parse(reserved_domain['expire_at'])
assert_in_delta Time.current + ReservedDomain::PAID_RESERVATION_EXPIRY, expire_at, 5.seconds
Expand Down
42 changes: 37 additions & 5 deletions test/models/free_domain_reservation_holder_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,10 @@ def setup
assert_includes holder.reserved_domains, reserved_domain
end

test "output_reserved_domains should return correct structure" do
# Create test data
test "output_reserved_domains should return correct structure with status reserved" do
domain_names = ['test1.test', 'test2.test']
holder = FreeDomainReservationHolder.create!(domain_names: domain_names)

domain_names.each do |name|
ReservedDomain.create!(
name: name,
Expand All @@ -44,14 +43,47 @@ def setup
)
end

# Test the method
output = holder.output_reserved_domains

assert_equal domain_names.length, output.length
output.each do |domain|
assert_includes domain_names, domain[:name]
assert_not_nil domain[:password]
assert_not_nil domain[:expire_at]
assert_equal 'reserved', domain[:status]
end
end

test "output_reserved_domains should return status registered when domain is registered" do
domain_names = ['shop.test']
holder = FreeDomainReservationHolder.create!(domain_names: domain_names)

ReservedDomain.create!(name: 'shop.test', password: 'test-password', expire_at: Time.current + 7.days)
# Domain exists in domains table — means it's been registered via registrar
Domain.find_or_create_by!(name: 'shop.test') do |d|
d.registrar = registrars(:bestnames)
d.registrant = contacts(:john)
d.period = 1
d.period_unit = 'y'
d.reserved_pw = 'test-password'
end

output = holder.output_reserved_domains

assert_equal 1, output.length
assert_equal 'registered', output.first[:status]
assert_nil output.first[:password]
assert_nil output.first[:expire_at]
end

test "output_reserved_domains should return status expired when reservation no longer exists" do
domain_names = ['gone.test']
holder = FreeDomainReservationHolder.create!(domain_names: domain_names)
# No ReservedDomain record and no Domain record

output = holder.output_reserved_domains

assert_equal 1, output.length
assert_equal 'expired', output.first[:status]
end
end
20 changes: 13 additions & 7 deletions test/models/reserve_domain_invoice_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,19 +53,25 @@ def teardown
end
end

test "builds correct output for reserved domains" do
test "builds correct output for reserved domains with status" do
invoice = ReserveDomainInvoice.create(invoice_number: '12345', domain_names: @domain_names, metainfo: TEST_USER_UNIQUE_ID)
ReservedDomain.create(
name: @domain_names.first,
name: @domain_names.first,
password: 'test123',
expire_at: Time.current + ReservedDomain::PAID_RESERVATION_EXPIRY
)

output = invoice.build_reserved_domains_output
assert_equal @domain_names.count - 1, output.length
domain_output = output.find { |d| d[:name] == @domain_names.first }
assert_equal 'test123', domain_output[:password]
assert_not_nil domain_output[:expire_at]
assert_equal @domain_names.count, output.length

reserved_output = output.find { |d| d[:name] == @domain_names.first }
assert_equal 'test123', reserved_output[:password]
assert_not_nil reserved_output[:expire_at]
assert_equal 'reserved', reserved_output[:status]

expired_output = output.find { |d| d[:name] == @domain_names.second }
assert_equal 'expired', expired_output[:status]
assert_nil expired_output[:password]
end

test "handles intersecting domains" do
Expand Down