snf_core 0.2.4 → 0.2.5

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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/lib/snf_core/engine.rb +1 -1
  3. data/lib/snf_core/version.rb +1 -1
  4. data/spec/dummy/Rakefile +6 -0
  5. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  6. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  7. data/spec/dummy/app/jobs/application_job.rb +7 -0
  8. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  9. data/spec/dummy/app/models/application_record.rb +3 -0
  10. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  11. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  12. data/spec/dummy/bin/dev +2 -0
  13. data/spec/dummy/bin/rails +4 -0
  14. data/spec/dummy/bin/rake +4 -0
  15. data/spec/dummy/bin/setup +34 -0
  16. data/spec/dummy/config/application.rb +43 -0
  17. data/spec/dummy/config/boot.rb +5 -0
  18. data/spec/dummy/config/cable.yml +10 -0
  19. data/spec/dummy/config/database.yml +20 -0
  20. data/spec/dummy/config/environment.rb +5 -0
  21. data/spec/dummy/config/environments/development.rb +67 -0
  22. data/spec/dummy/config/environments/production.rb +86 -0
  23. data/spec/dummy/config/environments/test.rb +53 -0
  24. data/spec/dummy/config/initializers/cors.rb +16 -0
  25. data/spec/dummy/config/initializers/filter_parameter_logging.rb +8 -0
  26. data/spec/dummy/config/initializers/inflections.rb +16 -0
  27. data/spec/dummy/config/locales/en.yml +31 -0
  28. data/spec/dummy/config/puma.rb +38 -0
  29. data/spec/dummy/config/routes.rb +3 -0
  30. data/spec/dummy/config/storage.yml +38 -0
  31. data/spec/dummy/config.ru +6 -0
  32. data/spec/dummy/db/migrate/20250226123213_create_active_storage_tables.active_storage.rb +57 -0
  33. data/spec/dummy/db/schema.rb +181 -0
  34. data/spec/dummy/log/development.log +901 -0
  35. data/spec/dummy/log/test.log +12199 -0
  36. data/spec/dummy/spec/fixtures/files/sample.pdf +0 -0
  37. data/spec/dummy/tmp/local_secret.txt +1 -0
  38. data/spec/dummy/tmp/storage/13/1y/131yod70wqijazn3ix829yvuuvge +0 -0
  39. data/spec/dummy/tmp/storage/16/na/16na9nc1z98jt6fyn3axj3bhudes +0 -0
  40. data/spec/dummy/tmp/storage/1t/oy/1toyz0i6f9u5xexr4cpwttr04ood +0 -0
  41. data/spec/dummy/tmp/storage/1x/i3/1xi33eqr5ipoaz0upakb8yy7qc4o +0 -0
  42. data/spec/dummy/tmp/storage/24/69/2469t9kpepg4fd8ki960h025li0b +0 -0
  43. data/spec/dummy/tmp/storage/2a/0u/2a0uyihfk1wn5c1fuz09unocwy2m +0 -0
  44. data/spec/dummy/tmp/storage/4t/86/4t862kv9wcz0p7wgdvpmtmczdadt +0 -0
  45. data/spec/dummy/tmp/storage/5s/zb/5szbksq6mg3768g9vtk788gc49gw +0 -0
  46. data/spec/dummy/tmp/storage/6g/dc/6gdc40iivivwbln1zs4dqedt5ni7 +0 -0
  47. data/spec/dummy/tmp/storage/6o/7a/6o7ax3ihg25bswxp4d601mqo7tl3 +0 -0
  48. data/spec/dummy/tmp/storage/6z/86/6z862zpc67sikzl0otbf418t2clj +0 -0
  49. data/spec/dummy/tmp/storage/92/hw/92hw9u9j6728qgwpcn7oqphe9tzj +0 -0
  50. data/spec/dummy/tmp/storage/9a/3q/9a3qd5qc7j6dzzmg16wcpvwoowmp +0 -0
  51. data/spec/dummy/tmp/storage/al/8s/al8szf81ccm4ckpvxh3bv6vlgp0y +0 -0
  52. data/spec/dummy/tmp/storage/b8/8l/b88ln7wuq13v4akgwgc0dgac8887 +0 -0
  53. data/spec/dummy/tmp/storage/bs/y9/bsy9t4961ra8hwlq06wjtgrrcflp +0 -0
  54. data/spec/dummy/tmp/storage/cs/x9/csx9mv26ab1lm82a7itryfq4v6rq +0 -0
  55. data/spec/dummy/tmp/storage/dp/0f/dp0fx9ji1bqvx1najwjgns6n7fhf +0 -0
  56. data/spec/dummy/tmp/storage/em/kc/emkc4tc71k65mfcurv6k8z1ylswl +0 -0
  57. data/spec/dummy/tmp/storage/em/vx/emvx0c15o74mr0nlcvdc7m88j2gi +0 -0
  58. data/spec/dummy/tmp/storage/ga/7e/ga7eiyyv0llme2i4xby0kdp4a4h8 +0 -0
  59. data/spec/dummy/tmp/storage/h4/vg/h4vgoatz21dhjrztrrbg2hdhkwjb +0 -0
  60. data/spec/dummy/tmp/storage/hi/9h/hi9ho77symoy2j0ye28fxgnxw3kt +0 -0
  61. data/spec/dummy/tmp/storage/hl/yy/hlyyu150rt2yos1sa9ed1qw49y26 +0 -0
  62. data/spec/dummy/tmp/storage/j7/6x/j76x0oirv7i4t6p3blseuaknp7pw +0 -0
  63. data/spec/dummy/tmp/storage/jq/95/jq95rqhv5usgucn2d2mmkhjufapu +0 -0
  64. data/spec/dummy/tmp/storage/ky/1y/ky1ys68lmat11bxs2395dqugiyig +0 -0
  65. data/spec/dummy/tmp/storage/ln/0f/ln0fz4opsdycu80q7urfez9ar7kn +0 -0
  66. data/spec/dummy/tmp/storage/mk/4w/mk4w528bsn47ewri0odui9s40f87 +0 -0
  67. data/spec/dummy/tmp/storage/na/6r/na6rrohinrnjofsq27u95up5rp8k +0 -0
  68. data/spec/dummy/tmp/storage/oc/f8/ocf8zs18lm9fnkpqj6wpshdpyf43 +0 -0
  69. data/spec/dummy/tmp/storage/oe/bq/oebq593a6bpwkbxpx6segtwyy0jy +0 -0
  70. data/spec/dummy/tmp/storage/qs/jk/qsjkqiiarr85uobud0qsnnmpraol +0 -0
  71. data/spec/dummy/tmp/storage/qw/7z/qw7zsf91njf7ga6454nrjpvddjn5 +0 -0
  72. data/spec/dummy/tmp/storage/rh/0h/rh0h80b8er9vp1u8dcocy1u58obf +0 -0
  73. data/spec/dummy/tmp/storage/tc/gu/tcgurel05x9fk9ksm4hxwfla3hg3 +0 -0
  74. data/spec/dummy/tmp/storage/tm/ce/tmce54998rdnz191k02fzowpebvw +0 -0
  75. data/spec/dummy/tmp/storage/w2/3f/w23f3igzkn7bddqxry5x4wsu2ths +0 -0
  76. data/spec/dummy/tmp/storage/wo/81/wo813rsnwvoa55h0vq0fr79iajuw +0 -0
  77. data/spec/dummy/tmp/storage/wy/14/wy14megn3o5zqplv9xg6u32uwkr6 +0 -0
  78. data/spec/dummy/tmp/storage/xj/yy/xjyygdd3znvvpt9ufz1vv4lfsx3w +0 -0
  79. data/spec/dummy/tmp/storage/yf/49/yf49a4ydheqf3cqs0u49sanbl4ms +0 -0
  80. data/spec/dummy/tmp/storage/yh/q1/yhq1muao2dpuykmj12bxhd0x4ntk +0 -0
  81. data/spec/dummy/tmp/storage/yx/jp/yxjpumjyo1jysjpg20qaxgsqg4fw +0 -0
  82. data/spec/dummy/tmp/storage/z1/gr/z1grp34d5vw7mi4g8vw8yfu91ny2 +0 -0
  83. data/spec/examples.txt +66 -0
  84. data/spec/factories/snf_core/addresses.rb +10 -0
  85. data/spec/factories/snf_core/business_documents.rb +18 -0
  86. data/spec/factories/snf_core/businesses.rb +10 -0
  87. data/spec/factories/snf_core/categories.rb +7 -0
  88. data/spec/factories/snf_core/customer_groups.rb +9 -0
  89. data/spec/factories/snf_core/groups.rb +6 -0
  90. data/spec/factories/snf_core/products.rb +9 -0
  91. data/spec/factories/snf_core/store_inventories.rb +8 -0
  92. data/spec/factories/snf_core/stores.rb +9 -0
  93. data/spec/factories/snf_core/users.rb +10 -0
  94. data/spec/factories/snf_core/wallets.rb +7 -0
  95. data/spec/models/snf_core/address_spec.rb +15 -0
  96. data/spec/models/snf_core/business_document_spec.rb +20 -0
  97. data/spec/models/snf_core/business_spec.rb +14 -0
  98. data/spec/models/snf_core/category_spec.rb +12 -0
  99. data/spec/models/snf_core/customer_group_spec.rb +11 -0
  100. data/spec/models/snf_core/group_spec.rb +11 -0
  101. data/spec/models/snf_core/product_spec.rb +17 -0
  102. data/spec/models/snf_core/store_inventory_spec.rb +24 -0
  103. data/spec/models/snf_core/store_spec.rb +13 -0
  104. data/spec/models/snf_core/user_spec.rb +23 -0
  105. data/spec/models/snf_core/wallet_spec.rb +28 -0
  106. data/spec/rails_helper.rb +46 -0
  107. data/spec/sample_spec.rb +5 -0
  108. data/spec/spec_helper.rb +36 -0
  109. data/spec/support/models/shared_examples.rb +49 -0
  110. data/spec/support/requests/shared_requests.rb +130 -0
  111. metadata +108 -1
@@ -0,0 +1,49 @@
1
+ module Scf
2
+ module Core
3
+ VALIDATIONS = {
4
+ presence: "validate_presence_of",
5
+ uniqueness: "validate_uniqueness_of",
6
+ numericality: "validate_numericality_of",
7
+ inclusion: "validate_inclusion_of",
8
+ belong_to: "belong_to",
9
+ have_many: "have_many",
10
+ have_and_belong_to_many: "have_and_belong_to_many",
11
+ have_one: "have_one",
12
+ delegate: "delegate_method"
13
+ }.freeze
14
+
15
+ RSpec.shared_examples "model_shared_spec" do |factory, attribs, subj = true|
16
+ subject { create(factory) } if subj
17
+
18
+ it "has a valid factory" do
19
+ expect(create(factory)).to be_valid
20
+ end
21
+
22
+ attribs.each do |attr|
23
+ attr.each do |k, v|
24
+ if v.instance_of?(Array)
25
+ v.each do |validation|
26
+ if validation.instance_of?(Hash)
27
+ method = validation.keys[0]
28
+ options = validation.values[0]
29
+ it {
30
+ expect(subject).to(
31
+ options.inject(
32
+ send(VALIDATIONS[method], k)
33
+ ) do |o, p|
34
+ p[1].nil? ? o.send(p[0]) : o.send(p[0], p[1])
35
+ end
36
+ )
37
+ }
38
+ else
39
+ it { is_expected.to(send(VALIDATIONS[validation], k)) }
40
+ end
41
+ end
42
+ else
43
+ it { is_expected.to(send(VALIDATIONS[v], k)) }
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,130 @@
1
+ module Scf
2
+ module Core
3
+ RSpec.shared_examples "request_shared_spec" do |controller, field_count, exclude = []|
4
+ include Scf::Core::Engine.routes.url_helpers
5
+
6
+ let(:factory) { controller.classify.underscore.to_sym }
7
+ let(:clazz) { "Scf::Core::#{controller.classify}".constantize }
8
+ let!(:user) { create(:user) }
9
+ let!(:headers) do
10
+ "token"
11
+ end
12
+
13
+ unless exclude.include?(:index)
14
+ describe "GET /index" do
15
+ it "returns success response" do
16
+ count = clazz.count
17
+ 3.times { create(factory) }
18
+ get(send("#{controller}_url"), headers: headers)
19
+ expect(response).to be_successful
20
+ result = JSON(response.body)
21
+
22
+ expect(result["success"]).to be_truthy
23
+ expect(result["data"].count - count).to eq 3
24
+ end
25
+ end
26
+ end
27
+
28
+ unless exclude.include?(:show)
29
+ describe "GET /show" do
30
+ it "returns a success response" do
31
+ obj = create(factory)
32
+ get(send("#{controller.singularize}_url", obj), headers: headers)
33
+ expect(response).to be_successful
34
+ result = JSON(response.body)
35
+ expect(result["success"]).to be_truthy
36
+ expect(result["data"].count).to eq field_count
37
+ expect(result["data"]["id"]).to eq obj.id
38
+ end
39
+ end
40
+ end
41
+
42
+ unless exclude.include?(:create)
43
+ describe "POST /create" do
44
+ context "with valid params" do
45
+ it "creates a new object" do
46
+ params = { payload: valid_attributes }
47
+ expect do
48
+ post(
49
+ send("#{controller}_url"),
50
+ headers: headers,
51
+ params: params,
52
+ as: :json
53
+ )
54
+ end.to change(clazz, :count).by(1)
55
+ expect(response).to have_http_status(:created)
56
+ expect(response.content_type).to eq("application/json; charset=utf-8")
57
+
58
+ result = JSON(response.body)
59
+ expect(result["success"]).to be_truthy
60
+ end
61
+ end
62
+
63
+ context "with invalid params" do
64
+ it "renders a JSON response with errors for the new object" do
65
+ params = { payload: invalid_attributes }
66
+ post(
67
+ send("#{controller}_url"),
68
+ params: params,
69
+ headers: headers,
70
+ as: :json
71
+ )
72
+
73
+ expect(response).to have_http_status(422)
74
+ expect(response.content_type).to eq("application/json; charset=utf-8")
75
+
76
+ result = JSON(response.body)
77
+ expect(result["success"]).to be_falsey
78
+ expect(result["error"]).not_to be_blank
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ unless exclude.include?(:update)
85
+ describe "PUT /update" do
86
+ context "with valid params" do
87
+ it "updates the requested object" do
88
+ obj = create(factory)
89
+ params = { id: obj.to_param, payload: new_attributes }
90
+ put(
91
+ send("#{controller.singularize}_url", obj),
92
+ headers: headers,
93
+ params: params, as: :json
94
+ )
95
+ obj.reload
96
+
97
+ expect(response).to have_http_status(:ok)
98
+ expect(obj.send(new_attributes.keys[0])).to eq new_attributes.values[0]
99
+ expect(response.content_type).to eq("application/json; charset=utf-8")
100
+
101
+ result = JSON(response.body)
102
+ expect(result["success"]).to be_truthy
103
+ expect(result["data"]["id"]).to eq obj.id
104
+ end
105
+ end
106
+
107
+ context "with invalid params" do
108
+ it "renders a JSON response with errors for the object" do
109
+ obj = create(factory)
110
+ params = { id: obj.to_param, payload: invalid_attributes }
111
+ put(
112
+ send("#{controller.singularize}_url", obj),
113
+ headers: headers,
114
+ params: params,
115
+ as: :json
116
+ )
117
+
118
+ expect(response).to have_http_status(422)
119
+ expect(response.content_type).to eq("application/json; charset=utf-8")
120
+
121
+ result = JSON(response.body)
122
+ expect(result["success"]).to be_falsey
123
+ expect(result["error"]).not_to be_blank
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snf_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat
@@ -317,6 +317,113 @@ files:
317
317
  - lib/snf_core/engine.rb
318
318
  - lib/snf_core/version.rb
319
319
  - lib/tasks/snf_core_tasks.rake
320
+ - spec/dummy/Rakefile
321
+ - spec/dummy/app/assets/stylesheets/application.css
322
+ - spec/dummy/app/controllers/application_controller.rb
323
+ - spec/dummy/app/jobs/application_job.rb
324
+ - spec/dummy/app/mailers/application_mailer.rb
325
+ - spec/dummy/app/models/application_record.rb
326
+ - spec/dummy/app/views/layouts/mailer.html.erb
327
+ - spec/dummy/app/views/layouts/mailer.text.erb
328
+ - spec/dummy/bin/dev
329
+ - spec/dummy/bin/rails
330
+ - spec/dummy/bin/rake
331
+ - spec/dummy/bin/setup
332
+ - spec/dummy/config.ru
333
+ - spec/dummy/config/application.rb
334
+ - spec/dummy/config/boot.rb
335
+ - spec/dummy/config/cable.yml
336
+ - spec/dummy/config/database.yml
337
+ - spec/dummy/config/environment.rb
338
+ - spec/dummy/config/environments/development.rb
339
+ - spec/dummy/config/environments/production.rb
340
+ - spec/dummy/config/environments/test.rb
341
+ - spec/dummy/config/initializers/cors.rb
342
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
343
+ - spec/dummy/config/initializers/inflections.rb
344
+ - spec/dummy/config/locales/en.yml
345
+ - spec/dummy/config/puma.rb
346
+ - spec/dummy/config/routes.rb
347
+ - spec/dummy/config/storage.yml
348
+ - spec/dummy/db/migrate/20250226123213_create_active_storage_tables.active_storage.rb
349
+ - spec/dummy/db/schema.rb
350
+ - spec/dummy/log/development.log
351
+ - spec/dummy/log/test.log
352
+ - spec/dummy/spec/fixtures/files/sample.pdf
353
+ - spec/dummy/tmp/local_secret.txt
354
+ - spec/dummy/tmp/storage/13/1y/131yod70wqijazn3ix829yvuuvge
355
+ - spec/dummy/tmp/storage/16/na/16na9nc1z98jt6fyn3axj3bhudes
356
+ - spec/dummy/tmp/storage/1t/oy/1toyz0i6f9u5xexr4cpwttr04ood
357
+ - spec/dummy/tmp/storage/1x/i3/1xi33eqr5ipoaz0upakb8yy7qc4o
358
+ - spec/dummy/tmp/storage/24/69/2469t9kpepg4fd8ki960h025li0b
359
+ - spec/dummy/tmp/storage/2a/0u/2a0uyihfk1wn5c1fuz09unocwy2m
360
+ - spec/dummy/tmp/storage/4t/86/4t862kv9wcz0p7wgdvpmtmczdadt
361
+ - spec/dummy/tmp/storage/5s/zb/5szbksq6mg3768g9vtk788gc49gw
362
+ - spec/dummy/tmp/storage/6g/dc/6gdc40iivivwbln1zs4dqedt5ni7
363
+ - spec/dummy/tmp/storage/6o/7a/6o7ax3ihg25bswxp4d601mqo7tl3
364
+ - spec/dummy/tmp/storage/6z/86/6z862zpc67sikzl0otbf418t2clj
365
+ - spec/dummy/tmp/storage/92/hw/92hw9u9j6728qgwpcn7oqphe9tzj
366
+ - spec/dummy/tmp/storage/9a/3q/9a3qd5qc7j6dzzmg16wcpvwoowmp
367
+ - spec/dummy/tmp/storage/al/8s/al8szf81ccm4ckpvxh3bv6vlgp0y
368
+ - spec/dummy/tmp/storage/b8/8l/b88ln7wuq13v4akgwgc0dgac8887
369
+ - spec/dummy/tmp/storage/bs/y9/bsy9t4961ra8hwlq06wjtgrrcflp
370
+ - spec/dummy/tmp/storage/cs/x9/csx9mv26ab1lm82a7itryfq4v6rq
371
+ - spec/dummy/tmp/storage/dp/0f/dp0fx9ji1bqvx1najwjgns6n7fhf
372
+ - spec/dummy/tmp/storage/em/kc/emkc4tc71k65mfcurv6k8z1ylswl
373
+ - spec/dummy/tmp/storage/em/vx/emvx0c15o74mr0nlcvdc7m88j2gi
374
+ - spec/dummy/tmp/storage/ga/7e/ga7eiyyv0llme2i4xby0kdp4a4h8
375
+ - spec/dummy/tmp/storage/h4/vg/h4vgoatz21dhjrztrrbg2hdhkwjb
376
+ - spec/dummy/tmp/storage/hi/9h/hi9ho77symoy2j0ye28fxgnxw3kt
377
+ - spec/dummy/tmp/storage/hl/yy/hlyyu150rt2yos1sa9ed1qw49y26
378
+ - spec/dummy/tmp/storage/j7/6x/j76x0oirv7i4t6p3blseuaknp7pw
379
+ - spec/dummy/tmp/storage/jq/95/jq95rqhv5usgucn2d2mmkhjufapu
380
+ - spec/dummy/tmp/storage/ky/1y/ky1ys68lmat11bxs2395dqugiyig
381
+ - spec/dummy/tmp/storage/ln/0f/ln0fz4opsdycu80q7urfez9ar7kn
382
+ - spec/dummy/tmp/storage/mk/4w/mk4w528bsn47ewri0odui9s40f87
383
+ - spec/dummy/tmp/storage/na/6r/na6rrohinrnjofsq27u95up5rp8k
384
+ - spec/dummy/tmp/storage/oc/f8/ocf8zs18lm9fnkpqj6wpshdpyf43
385
+ - spec/dummy/tmp/storage/oe/bq/oebq593a6bpwkbxpx6segtwyy0jy
386
+ - spec/dummy/tmp/storage/qs/jk/qsjkqiiarr85uobud0qsnnmpraol
387
+ - spec/dummy/tmp/storage/qw/7z/qw7zsf91njf7ga6454nrjpvddjn5
388
+ - spec/dummy/tmp/storage/rh/0h/rh0h80b8er9vp1u8dcocy1u58obf
389
+ - spec/dummy/tmp/storage/tc/gu/tcgurel05x9fk9ksm4hxwfla3hg3
390
+ - spec/dummy/tmp/storage/tm/ce/tmce54998rdnz191k02fzowpebvw
391
+ - spec/dummy/tmp/storage/w2/3f/w23f3igzkn7bddqxry5x4wsu2ths
392
+ - spec/dummy/tmp/storage/wo/81/wo813rsnwvoa55h0vq0fr79iajuw
393
+ - spec/dummy/tmp/storage/wy/14/wy14megn3o5zqplv9xg6u32uwkr6
394
+ - spec/dummy/tmp/storage/xj/yy/xjyygdd3znvvpt9ufz1vv4lfsx3w
395
+ - spec/dummy/tmp/storage/yf/49/yf49a4ydheqf3cqs0u49sanbl4ms
396
+ - spec/dummy/tmp/storage/yh/q1/yhq1muao2dpuykmj12bxhd0x4ntk
397
+ - spec/dummy/tmp/storage/yx/jp/yxjpumjyo1jysjpg20qaxgsqg4fw
398
+ - spec/dummy/tmp/storage/z1/gr/z1grp34d5vw7mi4g8vw8yfu91ny2
399
+ - spec/examples.txt
400
+ - spec/factories/snf_core/addresses.rb
401
+ - spec/factories/snf_core/business_documents.rb
402
+ - spec/factories/snf_core/businesses.rb
403
+ - spec/factories/snf_core/categories.rb
404
+ - spec/factories/snf_core/customer_groups.rb
405
+ - spec/factories/snf_core/groups.rb
406
+ - spec/factories/snf_core/products.rb
407
+ - spec/factories/snf_core/store_inventories.rb
408
+ - spec/factories/snf_core/stores.rb
409
+ - spec/factories/snf_core/users.rb
410
+ - spec/factories/snf_core/wallets.rb
411
+ - spec/models/snf_core/address_spec.rb
412
+ - spec/models/snf_core/business_document_spec.rb
413
+ - spec/models/snf_core/business_spec.rb
414
+ - spec/models/snf_core/category_spec.rb
415
+ - spec/models/snf_core/customer_group_spec.rb
416
+ - spec/models/snf_core/group_spec.rb
417
+ - spec/models/snf_core/product_spec.rb
418
+ - spec/models/snf_core/store_inventory_spec.rb
419
+ - spec/models/snf_core/store_spec.rb
420
+ - spec/models/snf_core/user_spec.rb
421
+ - spec/models/snf_core/wallet_spec.rb
422
+ - spec/rails_helper.rb
423
+ - spec/sample_spec.rb
424
+ - spec/spec_helper.rb
425
+ - spec/support/models/shared_examples.rb
426
+ - spec/support/requests/shared_requests.rb
320
427
  homepage: https://mksaddis.com/
321
428
  licenses:
322
429
  - MIT