moy_sklad 1.0.0.beta1

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 (58) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +13 -0
  6. data/Rakefile +1 -0
  7. data/bin/gencountry +18 -0
  8. data/doc/xml/Company.xml +165 -0
  9. data/doc/xml/CustomEntity.xml +53 -0
  10. data/doc/xml/CustomerOrder.xml +168 -0
  11. data/doc/xml/Good.xml +127 -0
  12. data/doc/xml/GoodFolder.xml +53 -0
  13. data/doc/xml/MOYsklad.xsd +2450 -0
  14. data/doc/xml/PaymentIn.xml +81 -0
  15. data/doc/xml/README.md +1 -0
  16. data/lib/moy_sklad/client/attribute.rb +119 -0
  17. data/lib/moy_sklad/client/base.rb +112 -0
  18. data/lib/moy_sklad/client/collection.rb +52 -0
  19. data/lib/moy_sklad/client/formatter.rb +37 -0
  20. data/lib/moy_sklad/client/resource.rb +56 -0
  21. data/lib/moy_sklad/client.rb +5 -0
  22. data/lib/moy_sklad/configuration.rb +74 -0
  23. data/lib/moy_sklad/model/company.rb +23 -0
  24. data/lib/moy_sklad/model/country.rb +12 -0
  25. data/lib/moy_sklad/model/custom_entity.rb +4 -0
  26. data/lib/moy_sklad/model/customer_order.rb +21 -0
  27. data/lib/moy_sklad/model/data/country_codes.yml +249 -0
  28. data/lib/moy_sklad/model/demand.rb +20 -0
  29. data/lib/moy_sklad/model/good.rb +32 -0
  30. data/lib/moy_sklad/model/good_folder.rb +4 -0
  31. data/lib/moy_sklad/model/payment_in.rb +9 -0
  32. data/lib/moy_sklad/model/supply.rb +20 -0
  33. data/lib/moy_sklad/model/templates/company.builder +132 -0
  34. data/lib/moy_sklad/model/templates/custom_entity.builder +42 -0
  35. data/lib/moy_sklad/model/templates/customer_order.builder +151 -0
  36. data/lib/moy_sklad/model/templates/demand.builder +147 -0
  37. data/lib/moy_sklad/model/templates/good.builder +83 -0
  38. data/lib/moy_sklad/model/templates/good_folder.builder +41 -0
  39. data/lib/moy_sklad/model/templates/payment_in.builder +72 -0
  40. data/lib/moy_sklad/model/templates/supply.builder +144 -0
  41. data/lib/moy_sklad/model.rb +13 -0
  42. data/lib/moy_sklad/nokogiri/document.rb +28 -0
  43. data/lib/moy_sklad/version.rb +3 -0
  44. data/lib/moy_sklad.rb +4 -0
  45. data/moy_sklad.gemspec +28 -0
  46. data/spec/ms_config.rb +44 -0
  47. data/spec/spec_helper.rb +9 -0
  48. data/spec/unit/company_spec.rb +60 -0
  49. data/spec/unit/country_spec.rb +18 -0
  50. data/spec/unit/custom_entity_spec.rb +64 -0
  51. data/spec/unit/customer_order_spec.rb +131 -0
  52. data/spec/unit/demand_spec.rb +53 -0
  53. data/spec/unit/fail_spec.rb +12 -0
  54. data/spec/unit/good_folder_spec.rb +51 -0
  55. data/spec/unit/good_spec.rb +149 -0
  56. data/spec/unit/payment_in_spec.rb +120 -0
  57. data/spec/unit/supply_spec.rb +51 -0
  58. metadata +211 -0
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Company' do
4
+
5
+ describe :index do
6
+ it "should return list of companies" do
7
+ comps = MoySklad::Model::Company.find(:all)
8
+ expect(comps.metadata[:total]).to eq(comps.length)
9
+ end
10
+ end
11
+
12
+ describe :find do
13
+ it "should find company" do
14
+ company = MoySklad::Model::Company.new
15
+ company.name = "Test company"
16
+ expect(company.save).to eq(true)
17
+
18
+ uuid = company.uuid
19
+
20
+ company = MoySklad::Model::Company.find(uuid)
21
+ expect(company.name).to eq("Test company")
22
+ end
23
+ end
24
+
25
+ describe :create do
26
+
27
+ it "should create and destroy new Company" do
28
+ company = MoySklad::Model::Company.new
29
+ company.name = "Test company"
30
+ expect(company.save).to eq(true)
31
+
32
+ expect(company.uuid.length).to eq(36)
33
+ uuid = company.uuid
34
+
35
+ company.destroy
36
+
37
+ expect{MoySklad::Model::Company.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
38
+ end
39
+
40
+ it "should create new Company with complex attributes" do
41
+ company = MoySklad::Model::Company.new
42
+ company.name = "Complex test company"
43
+ company.contact.phones = "123456"
44
+ company.contact.email = "foo@bar.baz"
45
+ company.tags.tag = ["клиент", "дизайнер", "тест"]
46
+
47
+ expect(company.save).to eq(true)
48
+
49
+ uuid = company.uuid
50
+
51
+ company = MoySklad::Model::Company.find(uuid)
52
+ expect(company.contact.phones).to eq("123456")
53
+ expect(company.contact.email).to eq("foo@bar.baz")
54
+ expect(company.tags.tag).to match_array(["клиент", "дизайнер", "тест"])
55
+
56
+ company.destroy
57
+ expect{MoySklad::Model::Company.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Country' do
4
+
5
+ describe :index do
6
+ it "should return list of countries" do
7
+ cl = MoySklad::Model::Country.find(:all)
8
+ expect(cl.metadata[:total]).to eq(cl.length)
9
+ end
10
+
11
+ it "should return correct uuid for code" do
12
+ uuid = MoySklad::Model::Country.uuid_from_code(643)
13
+ expect(uuid).to eq("9df7c2c3-7782-4c5c-a8ed-1102af611608")
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'CustomEntity' do
4
+
5
+ describe :index do
6
+ it "should return list of custom entitities" do
7
+ ents = MoySklad::Model::CustomEntity.find(:all)
8
+ expect(ents.metadata[:total]).to eq(ents.length)
9
+ end
10
+ end
11
+
12
+ describe :find do
13
+ it "should return entity", pending: 'need real data in config' do
14
+ entity = MoySklad::Model::CustomEntity.new
15
+ entity.name = "повезу на собаках"
16
+ entity.entityMetadataUuid = CUSTOM_DICT[:delivery_method]
17
+ expect(entity.save).to eq(true)
18
+
19
+ expect(entity.uuid.length).to eq(36)
20
+ uuid = entity.uuid
21
+ entity = MoySklad::Model::CustomEntity.find(uuid)
22
+ expect(entity.entityMetadataUuid).to eq(CUSTOM_DICT[:payment_method])
23
+ expect(entity.name).to eq("Безналичная оплата")
24
+ end
25
+ end
26
+
27
+ describe :create do
28
+
29
+ it "should create and destroy new Entity", pending: 'need real data in config' do
30
+ entity = MoySklad::Model::CustomEntity.new
31
+ entity.name = "повезу на собаках"
32
+ entity.entityMetadataUuid = CUSTOM_DICT[:delivery_method]
33
+ expect(entity.save).to eq(true)
34
+
35
+ expect(entity.uuid.length).to eq(36)
36
+ uuid = entity.uuid
37
+
38
+ entity.destroy
39
+
40
+ expect{MoySklad::Model::CustomEntity.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
41
+ end
42
+
43
+ it "should create, update and destroy new Entity", pending: 'need real data in config' do
44
+ entity = MoySklad::Model::CustomEntity.new
45
+ entity.name = "хочу бесплатно"
46
+ entity.entityMetadataUuid = CUSTOM_DICT[:payment_method]
47
+ expect(entity.save).to eq(true)
48
+
49
+ expect(entity.uuid.length).to eq(36)
50
+ uuid = entity.uuid
51
+
52
+ entity = MoySklad::Model::CustomEntity.find(uuid)
53
+ entity.name = "отработаю в поле"
54
+ expect(entity.save).to eq(true)
55
+
56
+ entity = MoySklad::Model::CustomEntity.find(uuid)
57
+ expect(entity.name).to eq("отработаю в поле")
58
+ expect(entity.entityMetadataUuid).to eq(CUSTOM_DICT[:payment_method])
59
+
60
+ entity.destroy
61
+ expect{MoySklad::Model::CustomEntity.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,131 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'CustomerOrder' do
4
+
5
+ describe :index do
6
+
7
+ it "should enumerate orders, customers and goods (consistency test)" do
8
+ orders = MoySklad::Model::CustomerOrder.find(:all)
9
+ expect(orders.metadata[:total]).to eq(orders.length)
10
+
11
+ sample = 10
12
+ sample = orders.metadata[:total] if orders.metadata[:total] < 5
13
+
14
+ # Don't check ALL orders, only 5 or less
15
+ orders.to_a.sample(sample).each do |o|
16
+ cost = 0
17
+
18
+ ## We have "bad" order in test DB, just skip them
19
+ next if o.sourceAgentUuid.is_a?(MoySklad::Client::Attribute::MissingAttr)
20
+
21
+ expect(o.sourceAgentUuid.length).to eq(36) # uuid
22
+
23
+ customer = MoySklad::Model::Company.find(o.sourceAgentUuid)
24
+ # puts "#{o.uuid} [##{o.name}] by #{customer.name}"
25
+ o.to_a(:customerOrderPosition).each do |p|
26
+
27
+ cost += ((p.quantity.to_f * p.price.sum.to_f) / 100) ## XXX zero price found in invalid orders
28
+
29
+ expect(p.goodUuid.length).to eq(36) # uuid
30
+ good = MoySklad::Model::Good.find(p.goodUuid)
31
+ # puts " - #{good.uuid} [#{good.name}], #{p.quantity}"
32
+ end
33
+ # puts " total cost: #{cost}"
34
+ end
35
+ end
36
+ end
37
+
38
+ describe :find do
39
+ it "should return order" do
40
+ order = MoySklad::Model::CustomerOrder.new
41
+ order.name = "12345"
42
+ expect(order.save).to eq(true)
43
+ expect(order.uuid.length).to eq(36)
44
+ uuid = order.uuid
45
+ order = MoySklad::Model::CustomerOrder.find(uuid)
46
+ expect(order.name).to eq("12345")
47
+ end
48
+ end
49
+
50
+ describe :create do
51
+ it "should create new empty Order" do
52
+ order = MoySklad::Model::CustomerOrder.new
53
+ expect(order.save).to eq(true)
54
+ expect(order.uuid.length).to eq(36)
55
+ uuid = order.uuid
56
+ order.destroy
57
+ expect{MoySklad::Model::CustomerOrder.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
58
+ end
59
+
60
+ it "should create new Order with values", pending: 'need real data in config' do
61
+ order = MoySklad::Model::CustomerOrder.new
62
+ order.name = "12345 - api test"
63
+ order.targetAgentUuid = TGT_AGENT
64
+ order.sourceStoreUuid = SRC_STORE
65
+ order.sourceAgentUuid = SRC_AGENT
66
+ expect(order.save).to eq(true)
67
+ expect(order.uuid.length).to eq(36)
68
+ uuid = order.uuid
69
+
70
+ order = MoySklad::Model::CustomerOrder.find(uuid)
71
+ expect(order.name).to eq("12345 - api test")
72
+ expect(order.targetAgentUuid).to eq(TGT_AGENT)
73
+ expect(order.sourceStoreUuid).to eq(SRC_STORE)
74
+ expect(order.sourceAgentUuid).to eq(SRC_AGENT)
75
+
76
+ customer = MoySklad::Model::Company.find(order.sourceAgentUuid)
77
+ expect(customer.name).to eq("Username")
78
+ order.destroy
79
+ expect{MoySklad::Model::CustomerOrder.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
80
+ end
81
+
82
+ it "should create order with items and check cost", pending: 'need real data in config' do
83
+ order = MoySklad::Model::CustomerOrder.new
84
+ order.name = "12345 - api test [items]"
85
+ order.applicable = true
86
+ order.targetAgentUuid = TGT_AGENT
87
+ order.sourceStoreUuid = SRC_STORE
88
+ order.sourceAgentUuid = SRC_AGENT
89
+ order.stateUuid = CONFIRMED_UUID
90
+ order.sum.sum = "100"
91
+ order.sum.sumInCurrency = "100"
92
+
93
+ KNOWN_ITEMS.each do |id, info|
94
+ order.add_item(id, {quantity: info[:quantity],
95
+ basePrice: { sum: info[:price] * 100, sumInCurrency: info[:price] * 100},
96
+ price: { sum: info[:price] * 100, sumInCurrency: info[:price] * 100}})
97
+ end
98
+
99
+ ORDER_OPTIONS.each do |type, opt|
100
+ order.set_attribute({uuid: opt[:key], value: :entityValueUuid}, opt[:value])
101
+ end
102
+
103
+ expect(order.save).to eq(true)
104
+ expect(order.uuid.length).to eq(36)
105
+ uuid = order.uuid
106
+
107
+ order = MoySklad::Model::CustomerOrder.find(uuid)
108
+ expect(order.name).to eq("12345 - api test [items]")
109
+ expect(order.targetAgentUuid).to eq(TGT_AGENT)
110
+ expect(order.sourceStoreUuid).to eq(SRC_STORE)
111
+ expect(order.sourceAgentUuid).to eq(SRC_AGENT)
112
+ expect(order.stateUuid).to eq(CONFIRMED_UUID)
113
+
114
+ ORDER_OPTIONS.each do |type, opt|
115
+ expect(order.get_attribute(opt[:key]).entityValueUuid).to eq(opt[:value])
116
+ end
117
+
118
+ # This is NORMAL, order sum is always zero :D
119
+ expect(order.sum.sum).to eq("4.744008E7")
120
+ expect(order.sum.sumInCurrency).to eq("4.744008E7")
121
+
122
+ expect(order.customerOrderPosition.length).to eq(KNOWN_ITEMS.keys.length)
123
+ customer = MoySklad::Model::Company.find(order.sourceAgentUuid)
124
+ expect(customer.name).to eq("Username")
125
+
126
+ order.destroy
127
+ expect{MoySklad::Model::CustomerOrder.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
128
+
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Demand' do
4
+
5
+ describe :index do
6
+ it "should return list of demands" do
7
+ sups = MoySklad::Model::Demand.find(:all)
8
+ expect(sups.metadata[:total]).to eq(sups.length)
9
+ end
10
+ end
11
+
12
+ describe :find do
13
+ it "should return demand" do
14
+ demand = MoySklad::Model::Demand.find("91fbb933-5b4f-11e4-90a2-8ecb0019b941")
15
+ expect(demand.uuid).to eq("91fbb933-5b4f-11e4-90a2-8ecb0019b941")
16
+ expect(demand.to_a(:shipmentOut).length).to eq(1)
17
+ end
18
+ end
19
+
20
+ describe :create do
21
+
22
+ it "should create new empty Demand" do
23
+ demand = MoySklad::Model::Demand.new
24
+ demand.sourceStoreUuid = "b6fd1ae5-213c-11e4-a18f-002590a28eca"
25
+ demand.customerOrderUuid = "f4fc79f6-5b4b-11e4-7a07-673d00379d95"
26
+ expect(demand.save).to eq(true)
27
+ expect(demand.uuid.length).to eq(36)
28
+ demand.destroy
29
+ end
30
+
31
+ it "should create new non-empty Demand" do
32
+ demand = MoySklad::Model::Demand.new
33
+ demand.sourceStoreUuid = "b6fd1ae5-213c-11e4-a18f-002590a28eca"
34
+ demand.targetAgentUuid = "a114c0a4-5ab2-11e4-7a07-673d00178e52"
35
+ demand.sourceAgentUuid = "13187298-1ee5-11e4-7dd5-002590a28eca"
36
+ demand.customerOrderUuid = "f4fc79f6-5b4b-11e4-7a07-673d00379d95"
37
+ demand.applicable = true
38
+ demand.add_item("9eccf56d-5ab4-11e4-90a2-8ecb000e5298", { quantity: 850 })
39
+ expect(demand.save).to eq(true)
40
+ expect(demand.uuid.length).to eq(36)
41
+
42
+ uuid = demand.uuid
43
+ demand = MoySklad::Model::Demand.find(uuid)
44
+ expect(demand.sum.sum).to eq("0.0")
45
+ expect(demand.sum.sumInCurrency).to eq("0.0")
46
+ expect(demand.to_a(:shipmentOut).length).to eq(1)
47
+ demand.destroy
48
+
49
+ expect{MoySklad::Model::Demand.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Some fail tests" do
4
+
5
+ it "should return error on save (invalid uuid)" do
6
+ p = MoySklad::Model::PaymentIn.new
7
+ p.demandsUuid = [nil]
8
+
9
+ expect(p.save).to eq(false)
10
+ expect(p.error.message).to eq("Invalid UUID string: ")
11
+ end
12
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'GoodFolder' do
4
+
5
+ describe :index do
6
+ it "should return list of folders" do
7
+ folders = MoySklad::Model::GoodFolder.find(:all)
8
+ expect(folders.metadata[:total]).to eq(folders.length)
9
+ end
10
+ end
11
+
12
+ describe :find do
13
+ it "should return item" do
14
+ folder = MoySklad::Model::GoodFolder.new
15
+ folder.name = "Test::top level"
16
+ expect(folder.save).to eq(true)
17
+ folder = MoySklad::Model::GoodFolder.find(folder.uuid)
18
+ expect(folder.name).to eq("Test::top level")
19
+ end
20
+ end
21
+
22
+ describe :create do
23
+
24
+ it "should create new GoodFolder" do
25
+ folder = MoySklad::Model::GoodFolder.new
26
+ folder.name = "Test folder"
27
+ expect(folder.save).to eq(true)
28
+ expect(folder.uuid.length).to eq(36)
29
+ folder.destroy
30
+ end
31
+
32
+ it "create tree" do
33
+ folder = MoySklad::Model::GoodFolder.new
34
+ folder.name = "Test::top level"
35
+ expect(folder.save).to eq(true)
36
+
37
+ subfolder = MoySklad::Model::GoodFolder.new({name: "Sublevel folder", parentUuid: folder.uuid})
38
+ expect(subfolder.save).to eq(true)
39
+
40
+ expect(subfolder.parentUuid).to eq(folder.uuid)
41
+
42
+ uuid = folder.uuid
43
+ suuid = subfolder.uuid
44
+
45
+ folder.destroy
46
+
47
+ expect{MoySklad::Model::GoodFolder.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
48
+ expect{MoySklad::Model::GoodFolder.find(suuid)}.to raise_error(ActiveResource::ResourceNotFound)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,149 @@
1
+ require 'spec_helper'
2
+ require 'securerandom'
3
+
4
+ describe 'Good' do
5
+
6
+ describe :index do
7
+ it "should return list of items" do
8
+ items = MoySklad::Model::Good.find(:all)
9
+ expect(items.metadata[:total]).to eq(items.length)
10
+ len = items.metadata[:total]
11
+
12
+ # Newly update items, should be less then total
13
+ items = MoySklad::Model::Good.find(:all, params: { filter: "updated>20141014010000"})
14
+ expect(items.metadata[:total]).to be < len
15
+ end
16
+ end
17
+
18
+ describe :find do
19
+ it "should return good" do
20
+ item = MoySklad::Model::Good.new
21
+ item.name = "Sample good"
22
+ item.save
23
+ item = MoySklad::Model::Good.find(item.uuid)
24
+ expect(item.name).to eq("Sample good")
25
+ end
26
+ end
27
+
28
+ describe "Simple attribute update" do
29
+ before(:all) do
30
+ item = MoySklad::Model::Good.new
31
+ item.name = "Simple test item for attr update test"
32
+ item.save
33
+ @uuid = item.uuid
34
+ @randomPrice = rand(1.0..100.0).round(2)
35
+ end
36
+
37
+ after(:all) do
38
+ MoySklad::Model::Good.find(@uuid).destroy
39
+ end
40
+
41
+ it "and update attr" do
42
+ item = MoySklad::Model::Good.find(@uuid)
43
+ expect(item.buyPrice).to eq("0.0")
44
+ item.buyPrice = @randomPrice
45
+ expect(item.save).to eq(true)
46
+ end
47
+
48
+ it "and read attr" do
49
+ item = MoySklad::Model::Good.find(@uuid)
50
+ expect(item.buyPrice.to_f).to eq(@randomPrice)
51
+ end
52
+ end
53
+
54
+ describe "create and update" do
55
+ it "should create a new Good" do
56
+ item = MoySklad::Model::Good.new
57
+ item.name = "Just a test item, с русскими букавами in da name"
58
+ item.description = "Отличный итем, шерстянной такой"
59
+ expect(item.save).to eq(true)
60
+
61
+ expect(item.uuid.length).to eq(36) # Should looks like real uuid
62
+
63
+ uuid = item.uuid
64
+
65
+ # Check item on server
66
+ item = MoySklad::Model::Good.find(uuid)
67
+ expect(item.uuid).to eq(uuid)
68
+
69
+ # Remove item
70
+ item.destroy
71
+
72
+ expect{MoySklad::Model::Good.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
73
+ end
74
+
75
+ describe "should create item with salePrice and able to update only default",
76
+ pending: 'need real data in config' do
77
+ before(:all) do
78
+ item = MoySklad::Model::Good.new
79
+ item.name = "Test item with custom prices"
80
+
81
+ item.set_sale_price(PRICE_CUR, 100)
82
+
83
+ item.save
84
+ @uuid = item.uuid
85
+ end
86
+
87
+ after(:all) do
88
+ MoySklad::Model::Good.find(@uuid).destroy
89
+ end
90
+
91
+ it "and get price" do
92
+ item = MoySklad::Model::Good.find(@uuid)
93
+ expect(item.get_sale_price(PRICE_CUR).value.to_f / 100).to eq(100)
94
+ end
95
+
96
+ it "and update CUR price (only default price can be updated)" do
97
+ item = MoySklad::Model::Good.find(@uuid)
98
+
99
+ item.set_sale_price(PRICE_CUR, 1000)
100
+ expect(item.save).to eq(true)
101
+
102
+ expect(item.get_sale_price(PRICE_CUR).value.to_f / 100).to eq(1000)
103
+ end
104
+ end
105
+
106
+ describe "item with custom attributes" do
107
+ let(:partno) { SecureRandom.hex }
108
+ let(:country) { SecureRandom.hex }
109
+ let(:link) { SecureRandom.hex }
110
+
111
+ before(:all) do
112
+ item = MoySklad::Model::Good.new
113
+ item.name = "Test item with custom attributes"
114
+ item.save
115
+ @uuid = item.uuid
116
+ end
117
+
118
+ after(:all) do
119
+ MoySklad::Model::Good.find(@uuid).destroy
120
+ end
121
+
122
+ it "should test empty attrs", pending: 'need real data in config' do
123
+ item = MoySklad::Model::Good.find(@uuid)
124
+
125
+ expect(item.get_attribute(META_LINK[:uuid])).to be_nil
126
+ expect(item.get_attribute(META_ARTNO)).to be_nil
127
+ expect(item.get_attribute(META_COUNTRY)).to be_nil
128
+ expect{item.get_attribute("foo")}.to raise_error(ArgumentError)
129
+ end
130
+
131
+ it "set and read attrs", pending: 'need real data in config' do
132
+ item = MoySklad::Model::Good.find(@uuid)
133
+
134
+ item.set_attribute(META_COUNTRY, country)
135
+ item.set_attribute(META_LINK, link)
136
+ item.set_attribute(META_ARTNO, partno)
137
+
138
+ expect(item.save).to eq(true)
139
+
140
+ item = MoySklad::Model::Good.find(@uuid)
141
+ expect(item.get_attribute(META_LINK)).to eq(link)
142
+ expect(item.get_attribute(META_ARTNO)).to eq(partno)
143
+ expect(item.get_attribute(META_COUNTRY[:uuid]).valueString).to eq(country)
144
+ end
145
+
146
+ end
147
+ end
148
+
149
+ end
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'PaymentIn' do
4
+
5
+ describe :index do
6
+ it "should return list of payments" do
7
+ payments = MoySklad::Model::PaymentIn.find(:all)
8
+ expect(payments.metadata[:total]).to eq(payments.length)
9
+ end
10
+ end
11
+
12
+ describe :find do
13
+ it "should return payment" do
14
+ payment = MoySklad::Model::PaymentIn.new
15
+ payment.name = "test - payment"
16
+ payment.sum.sum = 1000 * 100
17
+ expect(payment.save).to eq(true)
18
+ expect(payment.uuid.length).to eq(36)
19
+
20
+ uuid = payment.uuid
21
+ payment = MoySklad::Model::PaymentIn.find(uuid)
22
+ expect(payment.name).to eq("test - payment")
23
+ expect(payment.sum.sum).to eq("100000.0")
24
+ end
25
+ end
26
+
27
+ describe :create do
28
+
29
+ it "should create new empty PaymentIn" do
30
+ payment = MoySklad::Model::PaymentIn.new
31
+ expect(payment.save).to eq(true)
32
+ expect(payment.uuid.length).to eq(36)
33
+ payment.destroy
34
+ end
35
+
36
+ it "should create new non-empty PaymentIn" do
37
+ payment = MoySklad::Model::PaymentIn.new
38
+ payment.name = "test - payment"
39
+ payment.sum.sum = 1000 * 100
40
+ expect(payment.save).to eq(true)
41
+ expect(payment.uuid.length).to eq(36)
42
+
43
+ uuid = payment.uuid
44
+ payment = MoySklad::Model::PaymentIn.find(uuid)
45
+ expect(payment.name).to eq("test - payment")
46
+ expect(payment.sum.sum).to eq("100000.0")
47
+ expect(payment.sum.sumInCurrency).to eq("100000.0")
48
+ payment.destroy
49
+
50
+ expect{MoySklad::Model::PaymentIn.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
51
+ end
52
+
53
+ it "should create new order + payment", pending: 'need real data in config' do
54
+ order = MoySklad::Model::CustomerOrder.new
55
+ order.name = "Test with payment - API"
56
+ order.applicable = true
57
+ order.targetAgentUuid = TGT_AGENT
58
+ order.sourceStoreUuid = SRC_STORE
59
+ order.sourceAgentUuid = SRC_AGENT
60
+ order.stateUuid = CONFIRMED_UUID
61
+ order.sum.sum = "100"
62
+ order.sum.sumInCurrency = "100"
63
+
64
+ KNOWN_ITEMS.each do |id, info|
65
+ order.addItem(id, {quantity: info[:quantity],
66
+ basePrice: { sum: info[:price] * 100, sumInCurrency: info[:price] * 100},
67
+ price: { sum: info[:price] * 100, sumInCurrency: info[:price] * 100}})
68
+ end
69
+
70
+ ORDER_OPTIONS.each do |type, opt|
71
+ order.setAttribute({uuid: opt[:key], value: :entityValueUuid}, opt[:value])
72
+ end
73
+
74
+ expect(order.save).to eq(true)
75
+ expect(order.uuid.length).to eq(36)
76
+ uuid = order.uuid
77
+
78
+ payment = MoySklad::Model::PaymentIn.new
79
+ payment.sum.sum = order.sum.sum
80
+ payment.targetAgentUuid = TGT_AGENT
81
+ payment.sourceAgentUuid = SRC_AGENT
82
+ payment.describe = "Just a test"
83
+ payment.customerOrderUuid = uuid
84
+
85
+ expect(payment.save).to eq(true)
86
+ expect(payment.uuid.length).to eq(36)
87
+
88
+ # check order and bounded payment
89
+ order = MoySklad::Model::CustomerOrder.find(uuid)
90
+ expect(order.paymentsUuid.to_a(:financeInRef).first).to eq(payment.uuid)
91
+
92
+ # Order can be destroyed only after the payment
93
+ expect{order.destroy}.to raise_error(ActiveResource::ResourceNotFound)
94
+ payment.destroy
95
+ order.destroy
96
+ end
97
+
98
+ it "create payment and update applicable status", pending: 'need real data in config' do
99
+
100
+ payment = MoySklad::Model::PaymentIn.new
101
+ payment.targetAgentUuid = TGT_AGENT
102
+ payment.sourceAgentUuid = SRC_AGENT
103
+ payment.sum.sum = 1000 * 100
104
+ expect(payment.save).to eq(true)
105
+ uuid = payment.uuid
106
+
107
+ payment = MoySklad::Model::PaymentIn.find(uuid)
108
+ expect(payment.applicable).to eq("false")
109
+ payment.applicable = "true"
110
+ expect(payment.save).to eq(true)
111
+
112
+ payment = MoySklad::Model::PaymentIn.find(uuid)
113
+ expect(payment.applicable).to eq("true")
114
+
115
+ payment.destroy
116
+
117
+ expect{MoySklad::Model::PaymentIn.find(uuid)}.to raise_error(ActiveResource::ResourceNotFound)
118
+ end
119
+ end
120
+ end