stockor-core 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +6 -0
  4. data/Guardfile +13 -0
  5. data/LICENSE.txt +674 -0
  6. data/README.md +88 -0
  7. data/Rakefile +58 -0
  8. data/config/database.yml +9 -0
  9. data/db/migrate/20120110142845_create_skr_sequential_ids.rb +35 -0
  10. data/db/migrate/20140202185309_create_skr_gl_accounts.rb +15 -0
  11. data/db/migrate/20140202193316_create_skr_gl_periods.rb +16 -0
  12. data/db/migrate/20140202193318_create_skr_gl_transactions.rb +14 -0
  13. data/db/migrate/20140202193319_create_skr_gl_postings.rb +16 -0
  14. data/db/migrate/20140202193700_create_skr_gl_manual_entries.rb +13 -0
  15. data/db/migrate/20140213040608_create_skr_payment_terms.rb +16 -0
  16. data/db/migrate/20140220031700_create_skr_addresses.rb +19 -0
  17. data/db/migrate/20140220031800_create_skr_locations.rb +19 -0
  18. data/db/migrate/20140220190836_create_skr_vendors.rb +22 -0
  19. data/db/migrate/20140220203029_create_skr_customers.rb +22 -0
  20. data/db/migrate/20140224034759_create_skr_skus.rb +22 -0
  21. data/db/migrate/20140225032853_create_skr_sku_locs.rb +21 -0
  22. data/db/migrate/20140320030501_create_skr_uoms.rb +19 -0
  23. data/db/migrate/20140321031604_create_skr_sku_vendors.rb +18 -0
  24. data/db/migrate/20140322012143_create_skr_ia_reasons.rb +14 -0
  25. data/db/migrate/20140322014401_create_skr_inventory_adjustments.rb +16 -0
  26. data/db/migrate/20140322023453_create_skr_ia_lines.rb +18 -0
  27. data/db/migrate/20140322035024_create_skr_sku_trans.rb +21 -0
  28. data/db/migrate/20140322223912_create_skr_sales_orders.rb +27 -0
  29. data/db/migrate/20140322223920_create_skr_so_lines.rb +25 -0
  30. data/db/migrate/20140323001446_create_so_details_view.rb +81 -0
  31. data/db/migrate/20140327202102_create_skr_purchase_orders.rb +20 -0
  32. data/db/migrate/20140327202107_create_skr_po_lines.rb +25 -0
  33. data/db/migrate/20140327202207_create_skr_pick_tickets.rb +16 -0
  34. data/db/migrate/20140327202209_create_skr_pt_lines.rb +23 -0
  35. data/db/migrate/20140327224000_create_skr_invoices.rb +25 -0
  36. data/db/migrate/20140327224002_create_skr_inv_lines.rb +23 -0
  37. data/db/migrate/20140330232808_create_skr_sku_loc_details_view.rb +31 -0
  38. data/db/migrate/20140330232810_create_skr_sku_qty_details_view.rb +48 -0
  39. data/db/migrate/20140400164729_create_skr_vouchers.rb +22 -0
  40. data/db/migrate/20140400164733_create_skr_vo_lines.rb +21 -0
  41. data/db/migrate/20140401164729_create_skr_po_receipt.rb +16 -0
  42. data/db/migrate/20140401164740_create_skr_por_line.rb +21 -0
  43. data/db/migrate/20140422024010_create_skr_inv_details_view.rb +42 -0
  44. data/lib/generators/stockor/migrations/install_generator.rb +42 -0
  45. data/lib/skr/address.rb +97 -0
  46. data/lib/skr/business_entity.rb +25 -0
  47. data/lib/skr/concerns/acts_as_uom.rb +47 -0
  48. data/lib/skr/concerns/all.rb +30 -0
  49. data/lib/skr/concerns/association_extensions.rb +85 -0
  50. data/lib/skr/concerns/attr_accessor_with_default.rb +54 -0
  51. data/lib/skr/concerns/code_identifier.rb +43 -0
  52. data/lib/skr/concerns/export_associations.rb +52 -0
  53. data/lib/skr/concerns/export_join_tables.rb +39 -0
  54. data/lib/skr/concerns/export_methods.rb +104 -0
  55. data/lib/skr/concerns/export_scope.rb +66 -0
  56. data/lib/skr/concerns/exported_limit_evaluator.rb +17 -0
  57. data/lib/skr/concerns/gl_tran_extensions.rb +18 -0
  58. data/lib/skr/concerns/has_gl_transaction.rb +67 -0
  59. data/lib/skr/concerns/has_sku_loc_lines.rb +47 -0
  60. data/lib/skr/concerns/immutable_model.rb +32 -0
  61. data/lib/skr/concerns/inv_extensions.rb +24 -0
  62. data/lib/skr/concerns/is_order_like.rb +47 -0
  63. data/lib/skr/concerns/is_sku_loc_line.rb +65 -0
  64. data/lib/skr/concerns/json_attribute_access.rb +55 -0
  65. data/lib/skr/concerns/locked_fields.rb +84 -0
  66. data/lib/skr/concerns/pt_extensions.rb +22 -0
  67. data/lib/skr/concerns/pub_sub.rb +105 -0
  68. data/lib/skr/concerns/queries.rb +20 -0
  69. data/lib/skr/concerns/random_hash_code.rb +40 -0
  70. data/lib/skr/concerns/sanitize_json.rb +49 -0
  71. data/lib/skr/concerns/sku_extensions.rb +52 -0
  72. data/lib/skr/concerns/so_extensions.rb +30 -0
  73. data/lib/skr/concerns/state_machine.rb +62 -0
  74. data/lib/skr/concerns/track_modifications.rb +48 -0
  75. data/lib/skr/concerns/visible_id_identifier.rb +53 -0
  76. data/lib/skr/core.rb +30 -0
  77. data/lib/skr/core/configuration.rb +87 -0
  78. data/lib/skr/core/db.rb +82 -0
  79. data/lib/skr/core/db/migration_helpers.rb +178 -0
  80. data/lib/skr/core/db/migrations.rb +15 -0
  81. data/lib/skr/core/db/seed.rb +46 -0
  82. data/lib/skr/core/db/seed/chart_of_accounts.yml +168 -0
  83. data/lib/skr/core/db/seed/payment_terms.yml +60 -0
  84. data/lib/skr/core/logger.rb +36 -0
  85. data/lib/skr/core/numbers.rb +71 -0
  86. data/lib/skr/core/rails_engine.rb +5 -0
  87. data/lib/skr/core/standard_pricing_provider.rb +15 -0
  88. data/lib/skr/core/strings.rb +57 -0
  89. data/lib/skr/core/testing.rb +11 -0
  90. data/lib/skr/core/testing/assertions.rb +44 -0
  91. data/lib/skr/core/testing/fixtures.rb +25 -0
  92. data/lib/skr/core/testing/fixtures/skr/addresses.yml +53 -0
  93. data/lib/skr/core/testing/fixtures/skr/customers.yml +43 -0
  94. data/lib/skr/core/testing/fixtures/skr/gl_accounts.yml +86 -0
  95. data/lib/skr/core/testing/fixtures/skr/gl_manual_entries.yml +4 -0
  96. data/lib/skr/core/testing/fixtures/skr/gl_periods.yml +26 -0
  97. data/lib/skr/core/testing/fixtures/skr/gl_postings.yml +88 -0
  98. data/lib/skr/core/testing/fixtures/skr/gl_transactions.yml +35 -0
  99. data/lib/skr/core/testing/fixtures/skr/ia_lines.yml +7 -0
  100. data/lib/skr/core/testing/fixtures/skr/ia_reasons.yml +15 -0
  101. data/lib/skr/core/testing/fixtures/skr/inv_lines.yml +22 -0
  102. data/lib/skr/core/testing/fixtures/skr/inventory_adjustments.yml +6 -0
  103. data/lib/skr/core/testing/fixtures/skr/invoices.yml +10 -0
  104. data/lib/skr/core/testing/fixtures/skr/locations.yml +24 -0
  105. data/lib/skr/core/testing/fixtures/skr/payment_terms.yml +42 -0
  106. data/lib/skr/core/testing/fixtures/skr/pick_tickets.yml +4 -0
  107. data/lib/skr/core/testing/fixtures/skr/po_lines.yml +44 -0
  108. data/lib/skr/core/testing/fixtures/skr/po_receipts.yml +5 -0
  109. data/lib/skr/core/testing/fixtures/skr/por_lines.yml +13 -0
  110. data/lib/skr/core/testing/fixtures/skr/pt_lines.yml +12 -0
  111. data/lib/skr/core/testing/fixtures/skr/purchase_orders.yml +16 -0
  112. data/lib/skr/core/testing/fixtures/skr/sales_orders.yml +32 -0
  113. data/lib/skr/core/testing/fixtures/skr/sku_locs.yml +78 -0
  114. data/lib/skr/core/testing/fixtures/skr/sku_trans.yml +9 -0
  115. data/lib/skr/core/testing/fixtures/skr/sku_vendors.yml +35 -0
  116. data/lib/skr/core/testing/fixtures/skr/skus.yml +50 -0
  117. data/lib/skr/core/testing/fixtures/skr/so_lines.yml +71 -0
  118. data/lib/skr/core/testing/fixtures/skr/uoms.yml +61 -0
  119. data/lib/skr/core/testing/fixtures/skr/vendors.yml +48 -0
  120. data/lib/skr/core/testing/fixtures/skr/vo_lines.yml +12 -0
  121. data/lib/skr/core/testing/fixtures/skr/vouchers.yml +8 -0
  122. data/lib/skr/core/testing/helper.rb +18 -0
  123. data/lib/skr/core/testing/test_case.rb +17 -0
  124. data/lib/skr/core/version.rb +5 -0
  125. data/lib/skr/customer.rb +34 -0
  126. data/lib/skr/gl_account.rb +56 -0
  127. data/lib/skr/gl_manual_entry.rb +31 -0
  128. data/lib/skr/gl_period.rb +13 -0
  129. data/lib/skr/gl_posting.rb +54 -0
  130. data/lib/skr/gl_transaction.rb +174 -0
  131. data/lib/skr/ia_line.rb +129 -0
  132. data/lib/skr/ia_reason.rb +16 -0
  133. data/lib/skr/inv_line.rb +90 -0
  134. data/lib/skr/inventory_adjustment.rb +60 -0
  135. data/lib/skr/invoice.rb +159 -0
  136. data/lib/skr/location.rb +31 -0
  137. data/lib/skr/model.rb +37 -0
  138. data/lib/skr/null_user.rb +30 -0
  139. data/lib/skr/payment_term.rb +30 -0
  140. data/lib/skr/pick_ticket.rb +71 -0
  141. data/lib/skr/po_line.rb +69 -0
  142. data/lib/skr/po_receipt.rb +51 -0
  143. data/lib/skr/por_line.rb +80 -0
  144. data/lib/skr/pt_line.rb +74 -0
  145. data/lib/skr/purchase_order.rb +112 -0
  146. data/lib/skr/sales_order.rb +159 -0
  147. data/lib/skr/sequential_id.rb +23 -0
  148. data/lib/skr/sku.rb +99 -0
  149. data/lib/skr/sku_loc.rb +94 -0
  150. data/lib/skr/sku_tran.rb +111 -0
  151. data/lib/skr/sku_vendor.rb +26 -0
  152. data/lib/skr/so_line.rb +159 -0
  153. data/lib/skr/uom.rb +63 -0
  154. data/lib/skr/user_proxy.rb +60 -0
  155. data/lib/skr/validators/all.rb +2 -0
  156. data/lib/skr/validators/email.rb +17 -0
  157. data/lib/skr/validators/set.rb +18 -0
  158. data/lib/skr/vendor.rb +33 -0
  159. data/lib/skr/vo_line.rb +35 -0
  160. data/lib/skr/voucher.rb +119 -0
  161. data/lib/stockor/core.rb +9 -0
  162. data/stockor-core.gemspec +37 -0
  163. data/tasks/migrations.rake +23 -0
  164. data/tasks/publish.rake +8 -0
  165. data/test/address_test.rb +57 -0
  166. data/test/concerns/attr_with_default_test.rb +45 -0
  167. data/test/concerns/code_identifier_test.rb +46 -0
  168. data/test/concerns/export_associations_test.rb +7 -0
  169. data/test/concerns/export_methods_test.rb +31 -0
  170. data/test/concerns/export_scope_test.rb +16 -0
  171. data/test/concerns/exported_limits_test.rb +47 -0
  172. data/test/concerns/json_attribute_access_test.rb +27 -0
  173. data/test/concerns/pub_sub_test.rb +83 -0
  174. data/test/concerns/sanitize_json_test.rb +47 -0
  175. data/test/core/configuration_test.rb +24 -0
  176. data/test/core/numbers_test.rb +26 -0
  177. data/test/core/strings_test.rb +41 -0
  178. data/test/customer_test.rb +34 -0
  179. data/test/gl_account_test.rb +23 -0
  180. data/test/gl_manual_entry_test.rb +17 -0
  181. data/test/gl_period_test.rb +12 -0
  182. data/test/gl_posting_test.rb +39 -0
  183. data/test/gl_transaction_test.rb +58 -0
  184. data/test/ia_line_test.rb +68 -0
  185. data/test/ia_reason_test.rb +11 -0
  186. data/test/inv_line_test.rb +58 -0
  187. data/test/inventory_adjustment_test.rb +72 -0
  188. data/test/invoice_test.rb +63 -0
  189. data/test/location_test.rb +10 -0
  190. data/test/payment_term_test.rb +25 -0
  191. data/test/pick_ticket_test.rb +27 -0
  192. data/test/po_line_test.rb +36 -0
  193. data/test/po_receipt_test.rb +93 -0
  194. data/test/por_line_test.rb +79 -0
  195. data/test/pt_line_test.rb +29 -0
  196. data/test/purchase_order_test.rb +44 -0
  197. data/test/sales_order_test.rb +74 -0
  198. data/test/sku_loc_test.rb +50 -0
  199. data/test/sku_test.rb +45 -0
  200. data/test/sku_tran_test.rb +21 -0
  201. data/test/sku_vendor_test.rb +13 -0
  202. data/test/so_line_test.rb +89 -0
  203. data/test/test_helper.rb +1 -0
  204. data/test/uom_test.rb +14 -0
  205. data/test/vendor_test.rb +35 -0
  206. data/test/vo_line_test.rb +20 -0
  207. data/test/voucher_test.rb +35 -0
  208. data/yard_ext/all.rb +9 -0
  209. data/yard_ext/code_identifier_handler.rb +33 -0
  210. data/yard_ext/concern_meta_methods.rb +60 -0
  211. data/yard_ext/config_options.rb +27 -0
  212. data/yard_ext/exported_scope.rb +4 -0
  213. data/yard_ext/immutable_handler.rb +17 -0
  214. data/yard_ext/json_attr_accessor.rb +22 -0
  215. data/yard_ext/locked_fields_handler.rb +21 -0
  216. data/yard_ext/templates/default/layout/html/layout.erb +20 -0
  217. data/yard_ext/templates/default/method_details/html/github_link.erb +1 -0
  218. data/yard_ext/templates/default/method_details/setup.rb +3 -0
  219. data/yard_ext/validators.rb +1 -0
  220. data/yard_ext/visible_id_handler.rb +38 -0
  221. metadata +448 -0
@@ -0,0 +1,45 @@
1
+ require_relative '../test_helper'
2
+
3
+ class AttrAccessorWithDefaultTest < Skr::TestCase
4
+
5
+ Shared = Struct.new(:value)
6
+
7
+ class AttrTestClass
8
+ include Skr::Concerns::AttrAccessorWithDefault
9
+ attr_accessor_with_default :as_proc, Proc.new{ 42 }
10
+ attr_accessor_with_default :non_copying, ->{ "default string" }
11
+ attr_accessor_with_default :shared, Shared.new('default')
12
+ attr_accessor_with_default :non_shared, ->{ Shared.new('default') }
13
+ end
14
+
15
+ def test_access
16
+ a = AttrTestClass.new
17
+ b = AttrTestClass.new
18
+
19
+ assert_equal 42, b.as_proc
20
+
21
+ assert_equal "default string", b.non_copying
22
+
23
+ b.non_copying = "A new string"
24
+
25
+ assert_equal "default string", a.non_copying
26
+ a.non_copying = "third value"
27
+ assert_equal "A new string", b.non_copying
28
+
29
+
30
+ assert_equal "default", a.shared.value
31
+ assert_equal "default", b.shared.value
32
+
33
+ a.shared.value = "a new value"
34
+
35
+ assert_equal "a new value", a.shared.value
36
+ assert_equal "a new value", b.shared.value
37
+
38
+ a.non_shared.value = "a new value"
39
+ assert_equal "a new value", a.non_shared.value
40
+ assert_equal "default", b.non_shared.value
41
+
42
+ end
43
+
44
+
45
+ end
@@ -0,0 +1,46 @@
1
+ require_relative '../test_helper'
2
+
3
+
4
+ class CodeIdentifierTest < Skr::TestCase
5
+
6
+
7
+ class CodeIdentifierTestModel
8
+ class_attribute :blocks
9
+ attr_accessor :code
10
+
11
+ include Skr::Concerns::CodeIdentifier
12
+
13
+ def self.before_validation( opts={}, &block )
14
+ self.blocks||=[]
15
+ self.blocks.push( block )
16
+ end
17
+
18
+ def self.validates( *opts )
19
+ end
20
+
21
+ def run_validations
22
+ self.class.blocks.each{ |b| self.instance_eval(&b) }
23
+ end
24
+
25
+ def [](name)
26
+ :name == name ? 'A Long String of Nonsense' : ''
27
+ end
28
+
29
+ has_code_identifier :from => :name
30
+ end
31
+
32
+ def test_that_it_uppercases
33
+ ci = CodeIdentifierTestModel.new
34
+ ci.code='test'
35
+ ci.run_validations
36
+ assert_equal 'TEST', ci.code
37
+ end
38
+
39
+ def test_that_it_generates
40
+ ci = CodeIdentifierTestModel.new
41
+ ci.run_validations
42
+ assert ci.code.present?, "Code wasn't auto-generated"
43
+ assert_equal 'ALOSTOFNON', ci.code
44
+ end
45
+
46
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../test_helper'
2
+
3
+
4
+ class ExportAssociationsTest < Skr::TestCase
5
+
6
+
7
+ end
@@ -0,0 +1,31 @@
1
+ require_relative '../test_helper'
2
+
3
+
4
+ class ExportMethodsTest < Skr::TestCase
5
+
6
+ def teardown
7
+ GlPosting.send( :remove_method, :gl_transaction_description ) if GlPosting.new.respond_to?( :gl_transaction_description )
8
+ GlAccount.exported_methods = {}
9
+ end
10
+
11
+ def test_simple_delegation
12
+ refute GlPosting.new.respond_to? :gl_transaction_description
13
+
14
+ GlPosting.send :delegate_and_export, "gl_transaction_description"
15
+
16
+ glp = GlPosting.new
17
+ assert glp.respond_to? :gl_transaction_description, "Didn't add gl_transaction_description method"
18
+ assert_nil glp.gl_transaction_description
19
+ glp.build_gl_transaction( description: "test123" )
20
+ assert_equal "test123", glp.gl_transaction_description
21
+ assert GlPosting.has_exported_method?( :gl_transaction_description, nil ), "Didn't export method"
22
+ end
23
+
24
+ def test_dependancy_calculation
25
+ GlPosting.send :delegate_and_export, "gl_transaction_description"
26
+ GlPosting.send :delegate_and_export, "gl_transaction_notes", optional: false
27
+ assert_equal [:gl_transaction], GlPosting.exported_method_dependancies([])
28
+ assert_equal [:gl_transaction], GlPosting.exported_method_dependancies(['gl_transaction_description']).sort
29
+ end
30
+
31
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../test_helper'
2
+
3
+ class ExportScopeTest < Skr::TestCase
4
+
5
+
6
+ def test_method_creation
7
+ GlPosting.send( :remove_method, :big_query ) if GlPosting.respond_to?( :account_name )
8
+ end
9
+
10
+ def test_scope_method_creation
11
+ refute GlPosting.respond_to?(:big_query)
12
+ GlPosting.send( :export_scope, :big_query, ->{} )
13
+ assert GlPosting.respond_to?(:big_query)
14
+ end
15
+
16
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../test_helper'
2
+
3
+
4
+ class ExportedLimitsTest < Skr::TestCase
5
+
6
+ class LimitsTestingModel
7
+
8
+ include Skr::Concerns::ExportScope
9
+ include Skr::Concerns::ExportMethods
10
+
11
+ def self.scope(name, query)# act like ActiveRecord model
12
+ end
13
+
14
+ def secret_method( name, query )
15
+ end
16
+
17
+ def test_method( name, query )
18
+ end
19
+
20
+ export_methods :test_method, limit: lambda{ | user, type, name |
21
+ user == 'anon'
22
+ }
23
+
24
+ export_scope :admin_data, lambda{ | param |
25
+ param
26
+ }, limit: :only_admins
27
+
28
+ export_methods :secret_method, limit: :only_admins
29
+
30
+
31
+ def self.only_admins( user, type, name )
32
+ return user == 'admin'
33
+ end
34
+
35
+ end
36
+
37
+ def test_limits
38
+ assert LimitsTestingModel.has_exported_method?( 'test_method', 'anon' ), "anyone can retrieve no_limit data"
39
+
40
+ assert LimitsTestingModel.has_exported_scope?( 'admin_data', 'admin' ), "Admins can retrieve admin data"
41
+ refute LimitsTestingModel.has_exported_scope?( 'admin_data', 'non-admin' ), "Non-Admin cannot retrieve admin data"
42
+
43
+ assert LimitsTestingModel.has_exported_method?( 'secret_method', 'admin' ), "Public can retrieve public data"
44
+ refute LimitsTestingModel.has_exported_method?( 'secret_method', 'unk' ), "User must be admin to retrieve public data"
45
+ end
46
+
47
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../test_helper'
2
+
3
+
4
+ class JsonAttributeAccessTest < Skr::TestCase
5
+
6
+ def teardown
7
+ GlAccount.whitelisted_json_attributes = {}
8
+ GlAccount.blacklisted_json_attributes = {:updated_at=>{}, :created_at=>{}}
9
+ GlAccount.exported_associations = {}
10
+ end
11
+
12
+ def test_blacklisting
13
+ assert Skr::GlAccount.json_attribute_is_allowed?(:name)
14
+ assert Skr::GlAccount.json_attribute_is_allowed?('name')
15
+
16
+ GlAccount.send :blacklist_json_attributes, :name
17
+ refute Skr::GlAccount.json_attribute_is_allowed?('name')
18
+ end
19
+
20
+ def test_whitelisting
21
+
22
+ refute Skr::GlAccount.json_attribute_is_allowed?('updated_at')
23
+ GlAccount.send :whitelist_json_attributes, :updated_at
24
+ assert Skr::GlAccount.json_attribute_is_allowed?('updated_at')
25
+ end
26
+
27
+ end
@@ -0,0 +1,83 @@
1
+ require_relative '../test_helper'
2
+
3
+ class PubSubTest < Skr::TestCase
4
+
5
+ class EventTester
6
+ def self.after_save(*args); end
7
+ def self.after_create(*args); end
8
+ def self.after_update(*args); end
9
+ def self.after_destroy(*args); end
10
+
11
+ include Skr::Concerns::PubSub
12
+
13
+ def trigger( event, *args )
14
+ fire_event(event, *args )
15
+ end
16
+ end
17
+
18
+ class Ev1 < EventTester
19
+ has_additional_events :test_one
20
+ end
21
+
22
+ class Ev2 < EventTester
23
+ has_additional_events :test_two
24
+ end
25
+
26
+
27
+ def test_event_name_registration
28
+ assert_equal [ :save, :create, :update, :destroy ],EventTester.valid_event_names
29
+ assert_equal [ :save, :create, :update, :destroy, :test_one ],Ev1.valid_event_names
30
+ end
31
+
32
+ def test_only_valid
33
+ assert_raises( EventTester::InvalidEvent) do
34
+ EventTester.observe(:invalid_event) do | ev |
35
+ end
36
+ end
37
+ assert_raises( EventTester::InvalidEvent) do
38
+ EventTester.observe(:save) do | ev |
39
+ end
40
+ EventTester.new.trigger(:invalid_event)
41
+ end
42
+ assert_raises( EventTester::InvalidEvent) do
43
+ Ev1.observe(:test_two) do | ev |
44
+ end
45
+ end
46
+ assert_raises( EventTester::InvalidEvent) do
47
+ Ev2.observe(:test_one) do | ev |
48
+ end
49
+ end
50
+ begin
51
+ Ev2.observe(:test_one) do | ev |
52
+ end
53
+ rescue EventTester::InvalidEvent=>e
54
+ assert_equal 'test_one is not a valid event for PubSubTest::Ev2', e.to_s
55
+ end
56
+ end
57
+
58
+ def test_subscription
59
+ EventTester.observe(:save) do | ev |
60
+ end
61
+ end
62
+ def test_firing
63
+ results=[]
64
+ Ev1.observe(:test_one) do | ev, one, two |
65
+ results = [ ev, one, two ]
66
+ end
67
+ evt=Ev1.new
68
+ evt.trigger( :test_one, 3, 5 )
69
+ assert_equal [ evt, 3, 5 ], results
70
+
71
+ evt.trigger( :test_one, 'foo' )
72
+ assert_equal [ evt, 'foo', nil ], results
73
+ end
74
+
75
+
76
+ def test_firing_with_assertsions
77
+ assert_event_fires( Ev1, :test_one ) do
78
+ Ev1.new.trigger( :test_one, 3, 5 )
79
+ end
80
+ assert_equal [ 3, 5 ], last_event_results[1..-1]
81
+ end
82
+
83
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../test_helper'
2
+
3
+
4
+ class SanitizeJsonTest < Skr::TestCase
5
+
6
+
7
+ def teardown
8
+ GlAccount.whitelisted_json_attributes = {}
9
+ GlAccount.blacklisted_json_attributes = {}
10
+ GlAccount.exported_associations = {}
11
+ GlPosting.blacklisted_json_attributes = {}
12
+ end
13
+
14
+ def test_unknown_attribute_removal
15
+ data = { name: 'CASH', number: '1200', drop_table: 'users' }
16
+ json = Skr::GlAccount.sanitize_json(data)
17
+ assert_equal data.except(:drop_table), json
18
+ end
19
+
20
+ def test_cleaning_unwanted_attributes
21
+ data = { name: 'CASH', number: '1200',credits: [] }
22
+ json = Skr::GlAccount.sanitize_json(data)
23
+ data.delete(:credits)
24
+ assert_equal data, json
25
+ end
26
+
27
+ def test_exported_associations
28
+ data = { foo: 'bar', description: 'a test', debits: [], credits: [] }
29
+ json = Skr::GlTransaction.sanitize_json(data)
30
+ assert_equal( { description: 'a test', debits_attributes: [], credits_attributes: [] }, json )
31
+ end
32
+
33
+ def test_blacklisted_attributes
34
+ GlAccount.send :blacklist_json_attributes, :name
35
+ data = { name: 'CASH', number: '1200' }
36
+ json = Skr::GlAccount.sanitize_json(data)
37
+ data.delete( :name )
38
+ assert_equal data, json
39
+ end
40
+
41
+ def test_recursive_cleaning
42
+ data = { gl_transaction: { source: 'unk', credits: [ { account_number: '120001' } ] } }
43
+ json = GlManualEntry.sanitize_json(data)
44
+ assert_equal( { gl_transaction_attributes: { credits_attributes: [ { account_number: '120001' } ] } }, json )
45
+ end
46
+
47
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe Skr::Core::Configuration do
4
+
5
+ def test_default_values
6
+ conf = Skr::Core::DefaultConfiguration.new
7
+ Skr::Core.silence_logs do
8
+ assert_equal '01', conf.default_branch_code
9
+ assert_equal '01', Skr::Core.config.default_branch_code
10
+ end
11
+ end
12
+
13
+ def test_changing_values_are_logged
14
+ begin
15
+ assert_logs_matching( /default_branch_code changed from 01 to 02/ ) do
16
+ Skr::Core.config.default_branch_code='02'
17
+ end
18
+ ensure
19
+ Skr::Core.silence_logs { Skr::Core.config.default_branch_code='01' }
20
+ end
21
+ end
22
+
23
+
24
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe Skr::Core::Numbers do
4
+
5
+ Num = Skr::Core::Numbers
6
+
7
+
8
+ def test_percnum
9
+ assert Num::PercNum.new( '5%' ).is_percentage?, "is a percentage"
10
+ assert Num::PercNum.new( '5% ' ).is_percentage?, "is a percentage"
11
+ assert Num::PercNum.new( '5.3 % ' ).is_percentage?, "is a percentage"
12
+ refute Num::PercNum.new( '$5.3 ' ).is_percentage?, "is not a percentage"
13
+ # this is debatable, but we have to draw the line somewhere
14
+ refute Num::PercNum.new( '%5.3 ' ).is_percentage?, "is a percentage"
15
+
16
+ assert_equal '95.0', Num::PercNum.new( '5' ).debit_from(100).to_s
17
+ assert_equal '95.0', Num::PercNum.new( '5%' ).debit_from(100).to_s
18
+ assert_equal '105.0', Num::PercNum.new( '5%' ).credit_to(100).to_s
19
+ assert_equal '95.0', Num::PercNum.new( '-5%').credit_to(100).to_s
20
+
21
+ assert_equal '137.38449', Num::PercNum.new( '33.383%' ).credit_to(103).to_s
22
+ assert_equal '68.61551', Num::PercNum.new( '33.383%' ).debit_from(103).to_s
23
+ end
24
+
25
+
26
+ end
@@ -0,0 +1,41 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe Skr::Core::Strings do
4
+
5
+ # just 'cuz
6
+ Str = Skr::Core::Strings
7
+
8
+ def test_random_is_of_proper_length
9
+ assert_equal 12, Str.random.length
10
+ assert_equal 6, Str.random(6).length
11
+ end
12
+
13
+ def test_random_doesnt_use_bad_chars
14
+ bad = Str::BAD_RAND_CHARS
15
+ assert bad.present?, 'list of bad random chars is empty'
16
+ 0.upto(10).each do | i |
17
+ string = Str.random
18
+ string.each_char do |c|
19
+ refute bad.include?(c), "Random string #{string} included bad char '#{c}'"
20
+ end
21
+ end
22
+ end
23
+
24
+ def test_code_identifier_shortens
25
+ # if all words are long engouth to shorten, then it takes an
26
+ # equal number from each
27
+ assert_equal 'GENACMCORP', Str.code_identifier( 'General Acme Corp' )
28
+ # If one word is too short, it'll attempt to make up the difference with
29
+ # later words
30
+ assert_equal 'GENIINCORP', Str.code_identifier( 'General I Incorporated' )
31
+ # If it gets to the end and it's still too short, it'll append the
32
+ # padding char
33
+ assert_equal 'GENERALIBC', Str.code_identifier( 'General I BC' )
34
+ assert_equal 'GENERALIB*', Str.code_identifier( 'General I B.', padding: '*' )
35
+ assert_equal 'FSANSEYEAG', Str.code_identifier( 'Four score and seven years ago', padding: '*' )
36
+ assert_equal 'ALONSBEAST', Str.code_identifier( 'A long s beasty' )
37
+ assert_equal 'GE', Str.code_identifier( 'GE', padding: false )
38
+ assert_equal 'HI33ME', Str.code_identifier( 'Hi 33 Me!', padding: false )
39
+ assert_equal 'BADIANDOCO', Str.code_identifier( "Bayer, Dickinson and O'Conner", padding: false )
40
+ end
41
+ end