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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/Gemfile +6 -0
- data/Guardfile +13 -0
- data/LICENSE.txt +674 -0
- data/README.md +88 -0
- data/Rakefile +58 -0
- data/config/database.yml +9 -0
- data/db/migrate/20120110142845_create_skr_sequential_ids.rb +35 -0
- data/db/migrate/20140202185309_create_skr_gl_accounts.rb +15 -0
- data/db/migrate/20140202193316_create_skr_gl_periods.rb +16 -0
- data/db/migrate/20140202193318_create_skr_gl_transactions.rb +14 -0
- data/db/migrate/20140202193319_create_skr_gl_postings.rb +16 -0
- data/db/migrate/20140202193700_create_skr_gl_manual_entries.rb +13 -0
- data/db/migrate/20140213040608_create_skr_payment_terms.rb +16 -0
- data/db/migrate/20140220031700_create_skr_addresses.rb +19 -0
- data/db/migrate/20140220031800_create_skr_locations.rb +19 -0
- data/db/migrate/20140220190836_create_skr_vendors.rb +22 -0
- data/db/migrate/20140220203029_create_skr_customers.rb +22 -0
- data/db/migrate/20140224034759_create_skr_skus.rb +22 -0
- data/db/migrate/20140225032853_create_skr_sku_locs.rb +21 -0
- data/db/migrate/20140320030501_create_skr_uoms.rb +19 -0
- data/db/migrate/20140321031604_create_skr_sku_vendors.rb +18 -0
- data/db/migrate/20140322012143_create_skr_ia_reasons.rb +14 -0
- data/db/migrate/20140322014401_create_skr_inventory_adjustments.rb +16 -0
- data/db/migrate/20140322023453_create_skr_ia_lines.rb +18 -0
- data/db/migrate/20140322035024_create_skr_sku_trans.rb +21 -0
- data/db/migrate/20140322223912_create_skr_sales_orders.rb +27 -0
- data/db/migrate/20140322223920_create_skr_so_lines.rb +25 -0
- data/db/migrate/20140323001446_create_so_details_view.rb +81 -0
- data/db/migrate/20140327202102_create_skr_purchase_orders.rb +20 -0
- data/db/migrate/20140327202107_create_skr_po_lines.rb +25 -0
- data/db/migrate/20140327202207_create_skr_pick_tickets.rb +16 -0
- data/db/migrate/20140327202209_create_skr_pt_lines.rb +23 -0
- data/db/migrate/20140327224000_create_skr_invoices.rb +25 -0
- data/db/migrate/20140327224002_create_skr_inv_lines.rb +23 -0
- data/db/migrate/20140330232808_create_skr_sku_loc_details_view.rb +31 -0
- data/db/migrate/20140330232810_create_skr_sku_qty_details_view.rb +48 -0
- data/db/migrate/20140400164729_create_skr_vouchers.rb +22 -0
- data/db/migrate/20140400164733_create_skr_vo_lines.rb +21 -0
- data/db/migrate/20140401164729_create_skr_po_receipt.rb +16 -0
- data/db/migrate/20140401164740_create_skr_por_line.rb +21 -0
- data/db/migrate/20140422024010_create_skr_inv_details_view.rb +42 -0
- data/lib/generators/stockor/migrations/install_generator.rb +42 -0
- data/lib/skr/address.rb +97 -0
- data/lib/skr/business_entity.rb +25 -0
- data/lib/skr/concerns/acts_as_uom.rb +47 -0
- data/lib/skr/concerns/all.rb +30 -0
- data/lib/skr/concerns/association_extensions.rb +85 -0
- data/lib/skr/concerns/attr_accessor_with_default.rb +54 -0
- data/lib/skr/concerns/code_identifier.rb +43 -0
- data/lib/skr/concerns/export_associations.rb +52 -0
- data/lib/skr/concerns/export_join_tables.rb +39 -0
- data/lib/skr/concerns/export_methods.rb +104 -0
- data/lib/skr/concerns/export_scope.rb +66 -0
- data/lib/skr/concerns/exported_limit_evaluator.rb +17 -0
- data/lib/skr/concerns/gl_tran_extensions.rb +18 -0
- data/lib/skr/concerns/has_gl_transaction.rb +67 -0
- data/lib/skr/concerns/has_sku_loc_lines.rb +47 -0
- data/lib/skr/concerns/immutable_model.rb +32 -0
- data/lib/skr/concerns/inv_extensions.rb +24 -0
- data/lib/skr/concerns/is_order_like.rb +47 -0
- data/lib/skr/concerns/is_sku_loc_line.rb +65 -0
- data/lib/skr/concerns/json_attribute_access.rb +55 -0
- data/lib/skr/concerns/locked_fields.rb +84 -0
- data/lib/skr/concerns/pt_extensions.rb +22 -0
- data/lib/skr/concerns/pub_sub.rb +105 -0
- data/lib/skr/concerns/queries.rb +20 -0
- data/lib/skr/concerns/random_hash_code.rb +40 -0
- data/lib/skr/concerns/sanitize_json.rb +49 -0
- data/lib/skr/concerns/sku_extensions.rb +52 -0
- data/lib/skr/concerns/so_extensions.rb +30 -0
- data/lib/skr/concerns/state_machine.rb +62 -0
- data/lib/skr/concerns/track_modifications.rb +48 -0
- data/lib/skr/concerns/visible_id_identifier.rb +53 -0
- data/lib/skr/core.rb +30 -0
- data/lib/skr/core/configuration.rb +87 -0
- data/lib/skr/core/db.rb +82 -0
- data/lib/skr/core/db/migration_helpers.rb +178 -0
- data/lib/skr/core/db/migrations.rb +15 -0
- data/lib/skr/core/db/seed.rb +46 -0
- data/lib/skr/core/db/seed/chart_of_accounts.yml +168 -0
- data/lib/skr/core/db/seed/payment_terms.yml +60 -0
- data/lib/skr/core/logger.rb +36 -0
- data/lib/skr/core/numbers.rb +71 -0
- data/lib/skr/core/rails_engine.rb +5 -0
- data/lib/skr/core/standard_pricing_provider.rb +15 -0
- data/lib/skr/core/strings.rb +57 -0
- data/lib/skr/core/testing.rb +11 -0
- data/lib/skr/core/testing/assertions.rb +44 -0
- data/lib/skr/core/testing/fixtures.rb +25 -0
- data/lib/skr/core/testing/fixtures/skr/addresses.yml +53 -0
- data/lib/skr/core/testing/fixtures/skr/customers.yml +43 -0
- data/lib/skr/core/testing/fixtures/skr/gl_accounts.yml +86 -0
- data/lib/skr/core/testing/fixtures/skr/gl_manual_entries.yml +4 -0
- data/lib/skr/core/testing/fixtures/skr/gl_periods.yml +26 -0
- data/lib/skr/core/testing/fixtures/skr/gl_postings.yml +88 -0
- data/lib/skr/core/testing/fixtures/skr/gl_transactions.yml +35 -0
- data/lib/skr/core/testing/fixtures/skr/ia_lines.yml +7 -0
- data/lib/skr/core/testing/fixtures/skr/ia_reasons.yml +15 -0
- data/lib/skr/core/testing/fixtures/skr/inv_lines.yml +22 -0
- data/lib/skr/core/testing/fixtures/skr/inventory_adjustments.yml +6 -0
- data/lib/skr/core/testing/fixtures/skr/invoices.yml +10 -0
- data/lib/skr/core/testing/fixtures/skr/locations.yml +24 -0
- data/lib/skr/core/testing/fixtures/skr/payment_terms.yml +42 -0
- data/lib/skr/core/testing/fixtures/skr/pick_tickets.yml +4 -0
- data/lib/skr/core/testing/fixtures/skr/po_lines.yml +44 -0
- data/lib/skr/core/testing/fixtures/skr/po_receipts.yml +5 -0
- data/lib/skr/core/testing/fixtures/skr/por_lines.yml +13 -0
- data/lib/skr/core/testing/fixtures/skr/pt_lines.yml +12 -0
- data/lib/skr/core/testing/fixtures/skr/purchase_orders.yml +16 -0
- data/lib/skr/core/testing/fixtures/skr/sales_orders.yml +32 -0
- data/lib/skr/core/testing/fixtures/skr/sku_locs.yml +78 -0
- data/lib/skr/core/testing/fixtures/skr/sku_trans.yml +9 -0
- data/lib/skr/core/testing/fixtures/skr/sku_vendors.yml +35 -0
- data/lib/skr/core/testing/fixtures/skr/skus.yml +50 -0
- data/lib/skr/core/testing/fixtures/skr/so_lines.yml +71 -0
- data/lib/skr/core/testing/fixtures/skr/uoms.yml +61 -0
- data/lib/skr/core/testing/fixtures/skr/vendors.yml +48 -0
- data/lib/skr/core/testing/fixtures/skr/vo_lines.yml +12 -0
- data/lib/skr/core/testing/fixtures/skr/vouchers.yml +8 -0
- data/lib/skr/core/testing/helper.rb +18 -0
- data/lib/skr/core/testing/test_case.rb +17 -0
- data/lib/skr/core/version.rb +5 -0
- data/lib/skr/customer.rb +34 -0
- data/lib/skr/gl_account.rb +56 -0
- data/lib/skr/gl_manual_entry.rb +31 -0
- data/lib/skr/gl_period.rb +13 -0
- data/lib/skr/gl_posting.rb +54 -0
- data/lib/skr/gl_transaction.rb +174 -0
- data/lib/skr/ia_line.rb +129 -0
- data/lib/skr/ia_reason.rb +16 -0
- data/lib/skr/inv_line.rb +90 -0
- data/lib/skr/inventory_adjustment.rb +60 -0
- data/lib/skr/invoice.rb +159 -0
- data/lib/skr/location.rb +31 -0
- data/lib/skr/model.rb +37 -0
- data/lib/skr/null_user.rb +30 -0
- data/lib/skr/payment_term.rb +30 -0
- data/lib/skr/pick_ticket.rb +71 -0
- data/lib/skr/po_line.rb +69 -0
- data/lib/skr/po_receipt.rb +51 -0
- data/lib/skr/por_line.rb +80 -0
- data/lib/skr/pt_line.rb +74 -0
- data/lib/skr/purchase_order.rb +112 -0
- data/lib/skr/sales_order.rb +159 -0
- data/lib/skr/sequential_id.rb +23 -0
- data/lib/skr/sku.rb +99 -0
- data/lib/skr/sku_loc.rb +94 -0
- data/lib/skr/sku_tran.rb +111 -0
- data/lib/skr/sku_vendor.rb +26 -0
- data/lib/skr/so_line.rb +159 -0
- data/lib/skr/uom.rb +63 -0
- data/lib/skr/user_proxy.rb +60 -0
- data/lib/skr/validators/all.rb +2 -0
- data/lib/skr/validators/email.rb +17 -0
- data/lib/skr/validators/set.rb +18 -0
- data/lib/skr/vendor.rb +33 -0
- data/lib/skr/vo_line.rb +35 -0
- data/lib/skr/voucher.rb +119 -0
- data/lib/stockor/core.rb +9 -0
- data/stockor-core.gemspec +37 -0
- data/tasks/migrations.rake +23 -0
- data/tasks/publish.rake +8 -0
- data/test/address_test.rb +57 -0
- data/test/concerns/attr_with_default_test.rb +45 -0
- data/test/concerns/code_identifier_test.rb +46 -0
- data/test/concerns/export_associations_test.rb +7 -0
- data/test/concerns/export_methods_test.rb +31 -0
- data/test/concerns/export_scope_test.rb +16 -0
- data/test/concerns/exported_limits_test.rb +47 -0
- data/test/concerns/json_attribute_access_test.rb +27 -0
- data/test/concerns/pub_sub_test.rb +83 -0
- data/test/concerns/sanitize_json_test.rb +47 -0
- data/test/core/configuration_test.rb +24 -0
- data/test/core/numbers_test.rb +26 -0
- data/test/core/strings_test.rb +41 -0
- data/test/customer_test.rb +34 -0
- data/test/gl_account_test.rb +23 -0
- data/test/gl_manual_entry_test.rb +17 -0
- data/test/gl_period_test.rb +12 -0
- data/test/gl_posting_test.rb +39 -0
- data/test/gl_transaction_test.rb +58 -0
- data/test/ia_line_test.rb +68 -0
- data/test/ia_reason_test.rb +11 -0
- data/test/inv_line_test.rb +58 -0
- data/test/inventory_adjustment_test.rb +72 -0
- data/test/invoice_test.rb +63 -0
- data/test/location_test.rb +10 -0
- data/test/payment_term_test.rb +25 -0
- data/test/pick_ticket_test.rb +27 -0
- data/test/po_line_test.rb +36 -0
- data/test/po_receipt_test.rb +93 -0
- data/test/por_line_test.rb +79 -0
- data/test/pt_line_test.rb +29 -0
- data/test/purchase_order_test.rb +44 -0
- data/test/sales_order_test.rb +74 -0
- data/test/sku_loc_test.rb +50 -0
- data/test/sku_test.rb +45 -0
- data/test/sku_tran_test.rb +21 -0
- data/test/sku_vendor_test.rb +13 -0
- data/test/so_line_test.rb +89 -0
- data/test/test_helper.rb +1 -0
- data/test/uom_test.rb +14 -0
- data/test/vendor_test.rb +35 -0
- data/test/vo_line_test.rb +20 -0
- data/test/voucher_test.rb +35 -0
- data/yard_ext/all.rb +9 -0
- data/yard_ext/code_identifier_handler.rb +33 -0
- data/yard_ext/concern_meta_methods.rb +60 -0
- data/yard_ext/config_options.rb +27 -0
- data/yard_ext/exported_scope.rb +4 -0
- data/yard_ext/immutable_handler.rb +17 -0
- data/yard_ext/json_attr_accessor.rb +22 -0
- data/yard_ext/locked_fields_handler.rb +21 -0
- data/yard_ext/templates/default/layout/html/layout.erb +20 -0
- data/yard_ext/templates/default/method_details/html/github_link.erb +1 -0
- data/yard_ext/templates/default/method_details/setup.rb +3 -0
- data/yard_ext/validators.rb +1 -0
- data/yard_ext/visible_id_handler.rb +38 -0
- 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,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
|