stockor-core 0.2

Sign up to get free protection for your applications and to get access to all the features.
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