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