moy_sklad 1.0.0.beta1

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