diff --git a/forms/top_up.rb b/forms/top_up.rb new file mode 100644 index 0000000000000000000000000000000000000000..280385b3952bb8c58efabd0c28f27c58892aec73 --- /dev/null +++ b/forms/top_up.rb @@ -0,0 +1,18 @@ +form! +title "Buy Account Credit" + +field( + type: "fixed", + label: "Current balance", + value: "$#{'%.2f' % @balance}" +) + +field(@payment_methods.to_list_single) + +field( + datatype: "xs:decimal", + range: @range, + var: "amount", + label: "Amount of credit to buy", + required: true +) diff --git a/lib/buy_account_credit_form.rb b/lib/buy_account_credit_form.rb index 2cd9dcc484c9daace2cf1a91d502052947ec6a7e..1c3cca0519184be1713d82a8be782c90d2f64091 100644 --- a/lib/buy_account_credit_form.rb +++ b/lib/buy_account_credit_form.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require_relative "./xep0122_field" - class BuyAccountCreditForm class AmountValidationError < StandardError def initialize(amount) @@ -25,30 +23,13 @@ class BuyAccountCreditForm RANGE = (15..1000).freeze - AMOUNT_FIELD = - XEP0122Field.new( - "xs:decimal", - range: RANGE, - var: "amount", - label: "Amount of credit to buy", - required: true - ).field - - def balance - { - type: "fixed", - value: "Current balance: $#{'%.2f' % @balance}" - } - end - - def add_to_form(form) - form.type = :form - form.title = "Buy Account Credit" - form.fields = [ - balance, - @payment_methods.to_list_single, - AMOUNT_FIELD - ] + def form + FormTemplate.render( + :top_up, + balance: @balance, + payment_methods: @payment_methods, + range: RANGE + ) end def parse(form) diff --git a/lib/xep0122_field.rb b/lib/xep0122_field.rb deleted file mode 100644 index 2ca613f198deb555f716ba474faa7ed496974854..0000000000000000000000000000000000000000 --- a/lib/xep0122_field.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -require "blather" -require "nokogiri" - -class XEP0122Field - attr_reader :field - - def initialize(type, range: nil, **field) - @type = type - @range = range - @field = Blather::Stanza::X::Field.new(**field) - @field.add_child(validate) - end - -protected - - def validate - validate = Nokogiri::XML::Node.new("validate", field.document) - validate.default_namespace = "http://jabber.org/protocol/xdata-validate" - validate["datatype"] = @type - validate.add_child(validation) - validate - end - - def validation - range_node || Nokogiri::XML::Node.new( - "basic", - field.document - ).tap do |basic| - basic.default_namespace = "http://jabber.org/protocol/xdata-validate" - end - end - - def range_node - return unless @range - - Nokogiri::XML::Node.new("range", field.document).tap do |range| - range.default_namespace = "http://jabber.org/protocol/xdata-validate" - range["min"] = @range.min.to_s if @range.min - range["max"] = @range.max.to_s if @range.max - end - end -end diff --git a/sgx_jmp.rb b/sgx_jmp.rb index bb915cf2ebfddc06c0d51b7dcc3dff3fa4756ebb..e6455d724d2f7f20ebf933711ccf31ce5d1ae8f3 100644 --- a/sgx_jmp.rb +++ b/sgx_jmp.rb @@ -639,7 +639,7 @@ Command.new( BuyAccountCreditForm.for(customer).then do |credit_form| Command.reply { |reply| reply.allowed_actions = [:complete] - credit_form.add_to_form(reply.form) + reply.command << credit_form.form }.then do |iq| CreditCardSale.create(customer, **credit_form.parse(iq.form)) end diff --git a/test/test_buy_account_credit_form.rb b/test/test_buy_account_credit_form.rb index 4b052ef82ff048e995cff3b254a6da54a613cd12..5a65387d6b0c2332743fd316dc962a8bad1afc8e 100644 --- a/test/test_buy_account_credit_form.rb +++ b/test/test_buy_account_credit_form.rb @@ -33,23 +33,16 @@ class BuyAccountCreditFormTest < Minitest::Test end em :test_for - def test_balance - assert_equal( - { type: "fixed", value: "Current balance: $15.12" }, - @form.balance - ) - end - - def test_add_to_form - iq_form = Blather::Stanza::X.new - @form.add_to_form(iq_form) + def test_form + iq_form = @form.form assert_equal :form, iq_form.type assert_equal "Buy Account Credit", iq_form.title assert_equal( [ Blather::Stanza::X::Field.new( type: "fixed", - value: "Current balance: $15.12" + label: "Current balance", + value: "$15.12" ), Blather::Stanza::X::Field.new( type: "list-single", @@ -58,7 +51,11 @@ class BuyAccountCreditFormTest < Minitest::Test required: true, options: [{ label: "Test 1234", value: "0" }] ), - BuyAccountCreditForm::AMOUNT_FIELD + Blather::Stanza::X::Field.new( + var: "amount", + label: "Amount of credit to buy", + required: true + ) ], iq_form.fields ) diff --git a/test/test_xep0122_field.rb b/test/test_xep0122_field.rb deleted file mode 100644 index 5781435c5edea7e94a6be3c8e4f091e5b0e9bd63..0000000000000000000000000000000000000000 --- a/test/test_xep0122_field.rb +++ /dev/null @@ -1,61 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" -require "xep0122_field" - -class XEP0122FieldTest < Minitest::Test - def test_field - field = XEP0122Field.new( - "xs:decimal", - range: (0..3), - var: "v", - label: "l", - type: "text-single" - ).field - - example = Nokogiri::XML::Builder.new { |xml| - xml.field( - xmlns: "jabber:x:data", - var: "v", - type: "text-single", - label: "l" - ) do - xml.validate( - xmlns: "http://jabber.org/protocol/xdata-validate", - datatype: "xs:decimal" - ) do - xml.range(min: 0, max: 3) - end - end - } - - assert_equal example.doc.root.to_xml, field.to_xml - end - - def test_field_no_range - field = XEP0122Field.new( - "xs:decimal", - var: "v", - label: "l", - type: "text-single" - ).field - - example = Nokogiri::XML::Builder.new { |xml| - xml.field( - xmlns: "jabber:x:data", - var: "v", - type: "text-single", - label: "l" - ) do - xml.validate( - xmlns: "http://jabber.org/protocol/xdata-validate", - datatype: "xs:decimal" - ) do - xml.basic - end - end - } - - assert_equal example.doc.root.to_xml, field.to_xml - end -end