killbill-litle 1.10.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,96 @@
1
+ # -- encoding : utf-8 --
2
+
3
+ set :views, File.expand_path(File.dirname(__FILE__) + '/views')
4
+
5
+ include Killbill::Plugin::ActiveMerchant::Sinatra
6
+
7
+ configure do
8
+ # Usage: rackup -Ilib -E test
9
+ if development? or test?
10
+ # Make sure the plugin is initialized
11
+ plugin = ::Killbill::Litle::PaymentPlugin.new
12
+ plugin.logger = Logger.new(STDOUT)
13
+ plugin.logger.level = Logger::INFO
14
+ plugin.conf_dir = File.dirname(File.dirname(__FILE__)) + '/..'
15
+ plugin.start_plugin
16
+ end
17
+ end
18
+
19
+ helpers do
20
+ def plugin(session = {})
21
+ ::Killbill::Litle::PrivatePaymentPlugin.new(session)
22
+ end
23
+ end
24
+
25
+ # curl -v http://127.0.0.1:9292/plugins/killbill-litle/form
26
+ get '/plugins/killbill-litle/form', :provides => 'html' do
27
+ kb_account_id = request.GET['kb_account_id']
28
+ required_parameter! :kb_account_id, kb_account_id
29
+
30
+ kb_tenant_id = request.GET['kb_tenant_id']
31
+ kb_tenant = request.env['killbill_tenant']
32
+ kb_tenant_id ||= kb_tenant.id.to_s unless kb_tenant.nil?
33
+
34
+ currency = request.GET['currency'] || plugin.get_currency(kb_account_id)
35
+
36
+ tenant_config = config(kb_tenant_id)
37
+ litle_config = tenant_config[:litle].is_a?(Array) ? (tenant_config[:litle].find { |c| c[:account_id] == currency }) : tenant_config[:litle]
38
+
39
+ paypage_id = litle_config[:paypage_id]
40
+ required_parameter! :paypage_id, paypage_id, "is not configured for currency #{currency.to_sym}"
41
+
42
+ secure_page_url = litle_config[:secure_page_url]
43
+ required_parameter! :secure_page_url, secure_page_url, 'is not configured'
44
+
45
+ locals = {
46
+ :currency => currency,
47
+ :secure_page_url => secure_page_url,
48
+ :paypage_id => paypage_id,
49
+ :kb_account_id => kb_account_id,
50
+ :kb_tenant_id => kb_tenant_id,
51
+ :merchant_txn_id => request.GET['merchant_txn_id'] || '1',
52
+ :order_id => request.GET['order_id'] || '1',
53
+ :report_group => request.GET['report_group'] || 'Default Report Group',
54
+ :success_page => params[:successPage] || '/plugins/killbill-litle',
55
+ :failure_page => params[:failurePage]
56
+ }
57
+ erb :paypage, :locals => locals
58
+ end
59
+
60
+ # This is mainly for testing. Your application should redirect from the PayPage checkout above
61
+ # to a custom endpoint where you call the Kill Bill add payment method JAX-RS API.
62
+ # If you really want to use this endpoint, you'll have to call the Kill Bill refresh payment methods API
63
+ # to get a Kill Bill payment method id assigned.
64
+ post '/plugins/killbill-litle' do
65
+ pm = plugin.add_payment_method(params)
66
+
67
+ status 201
68
+ redirect '/plugins/killbill-litle/1.0/pms/' + pm.id.to_s
69
+ end
70
+
71
+ # curl -v http://127.0.0.1:9292/plugins/killbill-litle/1.0/pms/1
72
+ get '/plugins/killbill-litle/1.0/pms/:id', :provides => 'json' do
73
+ if pm = ::Killbill::Litle::LitlePaymentMethod.find_by_id(params[:id].to_i)
74
+ pm.to_json
75
+ else
76
+ status 404
77
+ end
78
+ end
79
+
80
+ # curl -v http://127.0.0.1:9292/plugins/killbill-litle/1.0/transactions/1
81
+ get '/plugins/killbill-litle/1.0/transactions/:id', :provides => 'json' do
82
+ if transaction = ::Killbill::Litle::LitleTransaction.find_by_id(params[:id].to_i)
83
+ transaction.to_json
84
+ else
85
+ status 404
86
+ end
87
+ end
88
+
89
+ # curl -v http://127.0.0.1:9292/plugins/killbill-litle/1.0/responses/1
90
+ get '/plugins/killbill-litle/1.0/responses/:id', :provides => 'json' do
91
+ if transaction = ::Killbill::Litle::LitleResponse.find_by_id(params[:id].to_i)
92
+ transaction.to_json
93
+ else
94
+ status 404
95
+ end
96
+ end
@@ -0,0 +1,21 @@
1
+ module Killbill #:nodoc:
2
+ module Litle #:nodoc:
3
+ class LitlePaymentMethod < ::Killbill::Plugin::ActiveMerchant::ActiveRecord::PaymentMethod
4
+
5
+ self.table_name = 'litle_payment_methods'
6
+
7
+ def self.from_response(kb_account_id, kb_payment_method_id, kb_tenant_id, cc_or_token, response, options, extra_params = {}, model = ::Killbill::Litle::LitlePaymentMethod)
8
+ super(kb_account_id,
9
+ kb_payment_method_id,
10
+ kb_tenant_id,
11
+ cc_or_token,
12
+ response,
13
+ options,
14
+ {
15
+ :token => extract(response, 'litleToken')
16
+ }.merge!(extra_params),
17
+ model)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,44 @@
1
+ module Killbill #:nodoc:
2
+ module Litle #:nodoc:
3
+ class LitleResponse < ::Killbill::Plugin::ActiveMerchant::ActiveRecord::Response
4
+
5
+ self.table_name = 'litle_responses'
6
+
7
+ has_one :litle_transaction
8
+
9
+ def self.from_response(api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, response, extra_params = {}, model = ::Killbill::Litle::LitleResponse)
10
+ super(api_call,
11
+ kb_account_id,
12
+ kb_payment_id,
13
+ kb_payment_transaction_id,
14
+ transaction_type,
15
+ payment_processor_account_id,
16
+ kb_tenant_id,
17
+ response,
18
+ {
19
+ :params_litle_txn_id => extract(response, 'litleTxnId'),
20
+ :params_order_id => extract(response, 'orderId') || extract(response, 'id'),
21
+ :params_litle_token => extract(response, 'litleToken'),
22
+ :params_auth_code => extract(response, 'authCode'),
23
+ :params_response => extract(response, 'response'),
24
+ :params_response_time => extract(response, 'responseTime'),
25
+ :params_message => extract(response, 'message')
26
+ }.merge!(extra_params),
27
+ model)
28
+ end
29
+
30
+ def self.search_where_clause(t, search_key)
31
+ where_clause = t[:params_litle_txn_id].eq(search_key)
32
+
33
+ # Only search successful payments and refunds
34
+ where_clause = where_clause.and(t[:success].eq(true))
35
+
36
+ super.or(where_clause)
37
+ end
38
+
39
+ def first_reference_id
40
+ params_litle_txn_id
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,11 @@
1
+ module Killbill #:nodoc:
2
+ module Litle #:nodoc:
3
+ class LitleTransaction < ::Killbill::Plugin::ActiveMerchant::ActiveRecord::Transaction
4
+
5
+ self.table_name = 'litle_transactions'
6
+
7
+ belongs_to :litle_response
8
+
9
+ end
10
+ end
11
+ end
@@ -1,19 +1,48 @@
1
- module Killbill::Litle
2
- class PrivatePaymentPlugin
3
- include Singleton
1
+ module Killbill #:nodoc:
2
+ module Litle #:nodoc:
3
+ class PrivatePaymentPlugin < ::Killbill::Plugin::ActiveMerchant::PrivatePaymentPlugin
4
+ def initialize(session = {})
5
+ super(:litle,
6
+ ::Killbill::Litle::LitlePaymentMethod,
7
+ ::Killbill::Litle::LitleTransaction,
8
+ ::Killbill::Litle::LitleResponse,
9
+ session)
10
+ end
4
11
 
5
- def get_currency(kb_account_id)
6
- account = kb_apis.get_account_by_id(kb_account_id)
7
- account.currency
8
- rescue => e
9
- 'USD'
10
- end
12
+ def add_payment_method(params)
13
+ payment_processor_account_id = params[:payment_processor_account_id] || :default
14
+
15
+ exp_month, exp_year = (params[:exp_date] || '').split('/')
16
+
17
+ # TODO Save response row (to keep the response_litle_txn_id)
11
18
 
12
- private
19
+ # Create the payment method (not associated with a Kill Bill payment method yet)
20
+ Killbill::Litle::LitlePaymentMethod.create!(:kb_account_id => params[:kb_account_id],
21
+ :kb_payment_method_id => nil,
22
+ :kb_tenant_id => params[:kb_tenant_id],
23
+ :token => params[:response_paypage_registration_id],
24
+ :cc_first_name => params[:first_name],
25
+ :cc_last_name => params[:last_name],
26
+ :cc_type => nil,
27
+ :cc_exp_month => exp_month,
28
+ :cc_exp_year => exp_year,
29
+ :cc_last_4 => params[:cc_num],
30
+ :address1 => nil,
31
+ :address2 => nil,
32
+ :city => nil,
33
+ :state => nil,
34
+ :zip => nil,
35
+ :country => nil,
36
+ :created_at => Time.now.utc,
37
+ :updated_at => Time.now.utc)
38
+ end
13
39
 
14
- def kb_apis
15
- # The logger should have been configured when the plugin started
16
- Killbill::Litle.kb_apis
40
+ def get_currency(kb_account_id)
41
+ account = kb_apis.get_account_by_id(kb_account_id)
42
+ account.currency
43
+ rescue => e
44
+ 'USD'
45
+ end
17
46
  end
18
47
  end
19
48
  end
@@ -1,8 +1,9 @@
1
- <!-- Inspired from the Litle official example: https://cert01.securepaypage.litle.com/checkout/dontSeeCard.html -->
1
+ <!-- Inspired from the Litle official example: https://www.testlitle.com/checkout/dontSeeCard.html -->
2
2
  <html>
3
3
  <head>
4
4
  <title>Pay Page Checkout</title>
5
- <script src="<%= secure_page_url %>/LitlePayPage/litle-api.js" type="text/javascript"></script>
5
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
6
+ <script src="<%= secure_page_url %>/LitlePayPage/litle-api2.js" type="text/javascript"></script>
6
7
  <script>
7
8
  $(document).ready(
8
9
  function() {
@@ -68,6 +69,7 @@
68
69
  else if (response.response == '889') {
69
70
  handleError("We are experiencing technical difficulties. Please try your query again later.");
70
71
  }
72
+ console.log(response.message);
71
73
  return false;
72
74
  }
73
75
 
@@ -90,7 +92,7 @@
90
92
  "url": "<%= secure_page_url %>"
91
93
  };
92
94
 
93
- sendToLitle(litleRequest, formFields, submitAfterLitle, onErrorAfterLitle, timeoutOnLitle, 5000);
95
+ new LitlePayPage().sendToLitle(litleRequest, formFields, submitAfterLitle, onErrorAfterLitle, timeoutOnLitle, 5000);
94
96
  return false;
95
97
  }
96
98
  );
@@ -101,6 +103,7 @@
101
103
  <body>
102
104
  <form method="post" id="form_checkout" name="form_checkout" action="<%= success_page %>">
103
105
  <input type="hidden" id="kb_account_id" name="kb_account_id" value="<%= kb_account_id %>"/>
106
+ <input type="hidden" id="kb_tenant_id" name="kb_tenant_id" value="<%= kb_tenant_id %>"/>
104
107
 
105
108
  <input type="hidden" id="request_paypage_id" name="request_paypage_id" value="<%= paypage_id %>"/>
106
109
  <input type="hidden" id="request_merchant_txn_id" name="request_merchant_txn_id" value="<%= merchant_txn_id %>"/>
@@ -135,8 +138,8 @@
135
138
  </body>
136
139
  <script>
137
140
  function callLitle() {
138
- if (typeof sendToLitle != 'function') {
139
- handleError("We are experiencing technical difficulties. Please try your query again later (API unavailable).");
141
+ if (typeof new LitlePayPage().sendToLitle != 'function') {
142
+ alert("We are experiencing technical difficulties. Please try your query again later (API unavailable).");
140
143
  }
141
144
  }
142
145
  </script>
data/litle.yml CHANGED
@@ -1,16 +1,38 @@
1
1
  :litle:
2
- :test: True
3
- :log_file: /var/tmp/litle.log
4
- :username: YOYO
5
- :password: certFoo
6
- :merchant_id:
7
- :USD: '064400'
8
- :EUR: '064401'
2
+ - :account_id: "USD"
3
+ :merchant_id: "your-merchant-id-USD"
4
+ :username: "your-username"
5
+ :password: "your-password"
6
+ :secure_page_url: "https://request-prelive.np-securepaypage-litle.com"
7
+ :paypage_id: "litle-paypage-id-USD"
8
+ - :account_id: "EUR"
9
+ :merchant_id: "your-merchant-id-EUR"
10
+ :username: "your-username"
11
+ :password: "your-password"
12
+ :secure_page_url: "https://request-prelive.np-securepaypage-litle.com"
13
+ :paypage_id: "litle-paypage-id-EUR"
9
14
 
10
15
  :database:
16
+ # SQLite (development)
11
17
  :adapter: sqlite3
12
18
  :database: test.db
13
-
14
- :currency_conversions:
15
- :BRL: 'USD'
16
-
19
+ # For MySQL
20
+ # :adapter: mysql
21
+ # :username: 'killbill'
22
+ # :password: 'killbill'
23
+ # :database: 'killbill' # or set the URL :
24
+ # #:url: jdbc:mysql://127.0.0.1:3306/killbill
25
+ # :driver: org.mariadb.jdbc.Driver # as in KB
26
+ # :pool: 30 # AR's default is max 5 connections
27
+ # In Kill Bill
28
+ # :adapter: mysql
29
+ # :jndi: 'killbill/osgi/jdbc'
30
+ # :pool: false # false-pool (JNDI pool's max)
31
+ # # uncomment if pool does not support JDBC4 :
32
+ # #:connection_alive_sql: 'select 1'
33
+ # # MySQL adapter #configure_connection defaults :
34
+ # # @@SESSION.sql_auto_is_null = 0,
35
+ # # @@SESSION.wait_timeout = 2147483,
36
+ # # @@SESSION.sql_mode = 'STRICT_ALL_TABLES'
37
+ # # ... can be disabled (on AR-JDBC 1.4) using :
38
+ # :configure_connection: false
data/pom.xml CHANGED
@@ -1,8 +1,9 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <!--
3
3
  ~ Copyright 2010-2013 Ning, Inc.
4
+ ~ Copyright 2014-2015 The Billing Project, LLC
4
5
  ~
5
- ~ Ning licenses this file to you under the Apache License, version 2.0
6
+ ~ The Billing Project licenses this file to you under the Apache License, version 2.0
6
7
  ~ (the "License"); you may not use this file except in compliance with the
7
8
  ~ License. You may obtain a copy of the License at:
8
9
  ~
@@ -25,7 +26,7 @@
25
26
  <groupId>org.kill-bill.billing.plugin.ruby</groupId>
26
27
  <artifactId>litle-plugin</artifactId>
27
28
  <packaging>pom</packaging>
28
- <version>1.10.0</version>
29
+ <version>2.0.0</version>
29
30
  <name>litle-plugin</name>
30
31
  <url>http://github.com/killbill/killbill-litle-plugin</url>
31
32
  <description>Plugin for accessing Litle as a payment gateway</description>
data/release.sh CHANGED
@@ -1,41 +1,61 @@
1
1
  set -e
2
2
 
3
- if [ "GNU" != "$(tar --help | grep GNU | head -1 | awk '{print $1}')" ]; then
4
- echo "Unable to release: make sure to use GNU tar"
3
+ BUNDLE=${BUNDLE-"bundle exec"}
4
+ MVN=${MVN-"mvn"}
5
+
6
+ if [ 'GNU' != "$(tar --help | grep GNU | head -1 | awk '{print $1}')" ]; then
7
+ echo 'Unable to release: make sure to use GNU tar'
5
8
  exit 1
6
9
  fi
7
10
 
8
11
  if $(ruby -e'require "java"'); then
9
12
  # Good
10
- echo "Detected JRuby"
13
+ echo 'Detected JRuby'
11
14
  else
12
- echo "Unable to release: make sure to use JRuby"
15
+ echo 'Unable to release: make sure to use JRuby'
13
16
  exit 1
14
17
  fi
15
18
 
16
19
  VERSION=`grep -E '<version>([0-9]+\.[0-9]+\.[0-9]+)</version>' pom.xml | sed 's/[\t \n]*<version>\(.*\)<\/version>[\t \n]*/\1/'`
17
- if [ "$VERSION" != "$(cat $PWD/VERSION)" ]; then
18
- echo "Unable to release: make sure the versions in pom.xml and VERSION match"
20
+ if [[ -z "$NO_RELEASE" && "$VERSION" != "$(cat $PWD/VERSION)" ]]; then
21
+ echo 'Unable to release: make sure the versions in pom.xml and VERSION match'
19
22
  exit 1
20
23
  fi
21
24
 
22
- echo "Cleaning up"
23
- rake killbill:clean ; rake build
25
+ echo 'Cleaning up'
26
+ $BUNDLE rake killbill:clean
27
+
28
+ echo 'Building gem'
29
+ $BUNDLE rake build
24
30
 
25
- echo "Pushing the gem to Rubygems"
26
- rake release
31
+ if [[ -z "$NO_RELEASE" ]]; then
32
+ echo 'Pushing the gem to Rubygems'
33
+ $BUNDLE rake release
34
+ fi
27
35
 
28
- echo "Building artifact"
29
- rake killbill:package
36
+ echo 'Building artifact'
37
+ $BUNDLE rake killbill:package
30
38
 
31
39
  ARTIFACT="$PWD/pkg/killbill-litle-$VERSION.tar.gz"
32
40
  echo "Pushing $ARTIFACT to Maven Central"
33
- mvn gpg:sign-and-deploy-file \
34
- -DgroupId=org.kill-bill.billing.plugin.ruby \
35
- -DartifactId=litle-plugin \
36
- -Dversion=$VERSION \
37
- -Dpackaging=tar.gz \
38
- -DrepositoryId=ossrh-releases \
39
- -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ \
40
- -Dfile=$ARTIFACT \
41
- -DpomFile=pom.xml
41
+
42
+ if [[ -z "$NO_RELEASE" ]]; then
43
+ GOAL=gpg:sign-and-deploy-file
44
+ REPOSITORY_ID=ossrh-releases
45
+ URL=https://oss.sonatype.org/service/local/staging/deploy/maven2/
46
+ else
47
+ GOAL=deploy:deploy-file
48
+ REPOSITORY_ID=sonatype-nexus-snapshots
49
+ URL=https://oss.sonatype.org/content/repositories/snapshots/
50
+ VERSION="$VERSION-SNAPSHOT"
51
+ fi
52
+
53
+ $MVN $GOAL \
54
+ -DgroupId=org.kill-bill.billing.plugin.ruby \
55
+ -DartifactId=litle-plugin \
56
+ -Dversion=$VERSION \
57
+ -Dpackaging=tar.gz \
58
+ -DrepositoryId=$REPOSITORY_ID \
59
+ -Durl=$URL \
60
+ -Dfile=$ARTIFACT \
61
+ -DpomFile=pom.xml
@@ -1,14 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Killbill::Litle::PaymentPlugin do
4
+
5
+ include ::Killbill::Plugin::ActiveMerchant::RSpec
6
+
4
7
  before(:each) do
5
8
  Dir.mktmpdir do |dir|
6
- file = File.new(File.join(dir, 'litle.yml'), "w+")
9
+ file = File.new(File.join(dir, 'litle.yml'), 'w+')
7
10
  file.write(<<-eos)
8
11
  :litle:
9
- :merchant_id:
10
- :USD: 'merchant_id'
11
- :password: 'password'
12
+ :test: true
12
13
  # As defined by spec_helper.rb
13
14
  :database:
14
15
  :adapter: 'sqlite3'
@@ -16,10 +17,7 @@ describe Killbill::Litle::PaymentPlugin do
16
17
  eos
17
18
  file.close
18
19
 
19
- @plugin = Killbill::Litle::PaymentPlugin.new
20
- @plugin.logger = Logger.new(STDOUT)
21
- @plugin.logger.level = Logger::INFO
22
- @plugin.conf_dir = File.dirname(file)
20
+ @plugin = build_plugin(::Killbill::Litle::PaymentPlugin, 'litle', File.dirname(file))
23
21
 
24
22
  # Start the plugin here - since the config file will be deleted
25
23
  @plugin.start_plugin
@@ -30,58 +28,33 @@ describe Killbill::Litle::PaymentPlugin do
30
28
  @plugin.stop_plugin
31
29
  end
32
30
 
33
- it 'should reset payment methods' do
34
- kb_account_id = '129384'
35
-
36
- @plugin.get_payment_methods(kb_account_id).size.should == 0
37
- verify_pms kb_account_id, 0
38
-
39
- # Create a pm with a kb_payment_method_id
40
- Killbill::Litle::LitlePaymentMethod.create :kb_account_id => kb_account_id,
41
- :kb_payment_method_id => 'kb-1',
42
- :litle_token => 'litle-1'
43
- verify_pms kb_account_id, 1
44
-
45
- # Add some in KillBill and reset
46
- payment_methods = []
47
- # Random order... Shouldn't matter...
48
- payment_methods << create_pm_info_plugin(kb_account_id, 'kb-3', false, 'litle-3')
49
- payment_methods << create_pm_info_plugin(kb_account_id, 'kb-2', false, 'litle-2')
50
- payment_methods << create_pm_info_plugin(kb_account_id, 'kb-4', false, 'litle-4')
51
- @plugin.reset_payment_methods kb_account_id, payment_methods
52
- verify_pms kb_account_id, 4
53
-
54
- # Add a payment method without a kb_payment_method_id
55
- Killbill::Litle::LitlePaymentMethod.create :kb_account_id => kb_account_id,
56
- :litle_token => 'litle-5'
57
- @plugin.get_payment_methods(kb_account_id).size.should == 5
58
-
59
- # Verify we can match it
60
- payment_methods << create_pm_info_plugin(kb_account_id, 'kb-5', false, 'litle-5')
61
- @plugin.reset_payment_methods kb_account_id, payment_methods
62
- verify_pms kb_account_id, 5
63
-
64
- @plugin.stop_plugin
65
- end
66
-
67
- private
68
-
69
- def verify_pms(kb_account_id, size)
70
- pms = @plugin.get_payment_methods(kb_account_id)
71
- pms.size.should == size
72
- pms.each do |pm|
73
- pm.account_id.should == kb_account_id
74
- pm.is_default.should == false
75
- pm.external_payment_method_id.should == 'litle-' + pm.payment_method_id.split('-')[1]
76
- end
77
- end
78
-
79
- def create_pm_info_plugin(kb_account_id, kb_payment_method_id, is_default, external_payment_method_id)
80
- pm_info_plugin = Killbill::Plugin::Model::PaymentMethodInfoPlugin.new
81
- pm_info_plugin.account_id = kb_account_id
82
- pm_info_plugin.payment_method_id = kb_payment_method_id
83
- pm_info_plugin.is_default = is_default
84
- pm_info_plugin.external_payment_method_id = external_payment_method_id
85
- pm_info_plugin
86
- end
31
+ # No offsite payments integration
32
+
33
+ #xit 'should generate forms correctly' do
34
+ # kb_account_id = SecureRandom.uuid
35
+ # kb_tenant_id = SecureRandom.uuid
36
+ # context = @plugin.kb_apis.create_context(kb_tenant_id)
37
+ # fields = @plugin.hash_to_properties({
38
+ # :order_id => '1234',
39
+ # :amount => 10
40
+ # })
41
+ # form = @plugin.build_form_descriptor kb_account_id, fields, [], context
42
+ #
43
+ # form.kb_account_id.should == kb_account_id
44
+ # form.form_method.should == 'POST'
45
+ # form.form_url.should == 'https://litle.com'
46
+ #
47
+ # form_fields = @plugin.properties_to_hash(form.form_fields)
48
+ #end
49
+
50
+ #xit 'should receive notifications correctly' do
51
+ # description = 'description'
52
+ #
53
+ # kb_tenant_id = SecureRandom.uuid
54
+ # context = @plugin.kb_apis.create_context(kb_tenant_id)
55
+ # properties = @plugin.hash_to_properties({ :description => description })
56
+ #
57
+ # notification = ""
58
+ # gw_notification = @plugin.process_notification notification, properties, context
59
+ #end
87
60
  end