sk_sdk 0.0.4 → 0.0.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.
- data/README.rdoc +7 -1
- data/VERSION +1 -1
- data/lib/sk_sdk/README_ArCli.rdoc +8 -4
- data/lib/sk_sdk/ar_cli.rb +1 -3
- data/lib/sk_sdk/oauth.rb +1 -0
- data/lib/sk_sdk/signed_request.rb +1 -0
- data/sk_sdk.gemspec +13 -2
- data/spec/resources_spec_helper.rb +43 -0
- data/spec/sk_sdk/ar_cli_spec.rb +2 -25
- data/spec/sk_sdk/resources/README.rdoc +9 -0
- data/spec/sk_sdk/resources/clients_spec.rb +102 -0
- data/spec/sk_sdk/resources/credit_note_spec.rb +113 -0
- data/spec/sk_sdk/resources/invoice_spec.rb +152 -0
- data/spec/sk_sdk/resources/product_spec.rb +63 -0
- data/spec/spec_helper.rb +0 -18
- metadata +15 -4
data/README.rdoc
CHANGED
@@ -16,7 +16,7 @@ Dependencies (gem's):
|
|
16
16
|
|
17
17
|
== Classes
|
18
18
|
|
19
|
-
All classes must be explicitly required
|
19
|
+
All classes must be explicitly required so each can be used on their own.
|
20
20
|
|
21
21
|
require 'sk_sdk/signed_request'
|
22
22
|
require 'sk_sdk/oauth'
|
@@ -37,6 +37,12 @@ PubSub/Webhook callbacks.
|
|
37
37
|
Create classes out if thin air to CRUD SalesKing object's using activeresource
|
38
38
|
{see README}[https://github.com/salesking/sk_sdk/blob/master/lib/sk_sdk/README_ArCli.rdoc]
|
39
39
|
|
40
|
+
This client uses HTTPBasic Auth with email/password and does NOT use oAuth. This
|
41
|
+
authentication method might be kicked in the future, as oAuth2 is considered
|
42
|
+
safer.
|
43
|
+
If you have found a convenient way to enable ActiveResource with oAuth2 we are
|
44
|
+
glad to hear from you.
|
45
|
+
|
40
46
|
== Usage
|
41
47
|
|
42
48
|
Read specs: https://github.com/salesking/sk_sdk/tree/master/spec/sk_sdk
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
@@ -34,11 +34,13 @@ First create the classes:
|
|
34
34
|
SK::SDK::ArCli.make(:credit_note, King)
|
35
35
|
|
36
36
|
Now the classes are available they need connection settings first. Those Must
|
37
|
-
be set for each class separate
|
37
|
+
be set for each class separate and you MUST provide the full url using the right
|
38
|
+
protocol http/https + SUBDomain + salesking url + /api
|
39
|
+
Our production system only supports HTTPS.
|
38
40
|
|
39
41
|
[Client, CreditNote].each do |i|
|
40
|
-
i.send(:set_connection, {:site => 'my_sub.salesking.eu',
|
41
|
-
:user => '
|
42
|
+
i.send(:set_connection, {:site => 'https://my_sub.salesking.eu/api',
|
43
|
+
:user => 'my-users@login-email.com',
|
42
44
|
:password => 'password' })
|
43
45
|
client = Client.new(:last_name=> 'Meister')
|
44
46
|
client.first_name = "Bau"
|
@@ -59,7 +61,7 @@ using your SalesKing login email and password.
|
|
59
61
|
|
60
62
|
For a production environment be advised to create a user, per api client, and
|
61
63
|
restrict his rights with our build in role-system!
|
62
|
-
|
64
|
+
|
63
65
|
|
64
66
|
=== API Tutorial and Tools
|
65
67
|
|
@@ -75,6 +77,8 @@ http-basic-auth can be used.
|
|
75
77
|
|
76
78
|
== Tests / Specs
|
77
79
|
|
80
|
+
Take a look into spec/resources to see a how-to
|
81
|
+
|
78
82
|
rake coverage
|
79
83
|
|
80
84
|
Copyright (c) 2011 Georg Leciejewski, released under the MIT license
|
data/lib/sk_sdk/ar_cli.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'sk_sdk'
|
2
3
|
require 'active_resource'
|
3
4
|
require 'active_resource/version'
|
4
5
|
# patches are for specific AR version
|
@@ -10,9 +11,6 @@ elsif ActiveResource::VERSION::MAJOR < 3
|
|
10
11
|
require 'sk_sdk/ar_cli/patches/ar2/base'
|
11
12
|
end
|
12
13
|
|
13
|
-
# schema gem
|
14
|
-
#require 'sk_api_schema'
|
15
|
-
|
16
14
|
module SK::SDK
|
17
15
|
class ArCli
|
18
16
|
# Create a class for a given name
|
data/lib/sk_sdk/oauth.rb
CHANGED
data/sk_sdk.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sk_sdk}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Georg Leciejewski"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-05-01}
|
13
13
|
s.description = %q{Connect your business world with SalesKing. This gem gives ruby developers a jump-start for building SalesKing Business Apps. Under the hood it provides classes to handle oAuth, make RESTfull API requests and parses JSON Schema }
|
14
14
|
s.email = %q{gl@salesking.eu}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -30,9 +30,15 @@ Gem::Specification.new do |s|
|
|
30
30
|
"lib/sk_sdk/oauth.rb",
|
31
31
|
"lib/sk_sdk/signed_request.rb",
|
32
32
|
"sk_sdk.gemspec",
|
33
|
+
"spec/resources_spec_helper.rb",
|
33
34
|
"spec/settings.yml",
|
34
35
|
"spec/sk_sdk/ar_cli_spec.rb",
|
35
36
|
"spec/sk_sdk/oauth_spec.rb",
|
37
|
+
"spec/sk_sdk/resources/README.rdoc",
|
38
|
+
"spec/sk_sdk/resources/clients_spec.rb",
|
39
|
+
"spec/sk_sdk/resources/credit_note_spec.rb",
|
40
|
+
"spec/sk_sdk/resources/invoice_spec.rb",
|
41
|
+
"spec/sk_sdk/resources/product_spec.rb",
|
36
42
|
"spec/sk_sdk/signed_request_spec.rb",
|
37
43
|
"spec/spec_helper.rb"
|
38
44
|
]
|
@@ -41,8 +47,13 @@ Gem::Specification.new do |s|
|
|
41
47
|
s.rubygems_version = %q{1.6.2}
|
42
48
|
s.summary = %q{SalesKing SDK Ruby}
|
43
49
|
s.test_files = [
|
50
|
+
"spec/resources_spec_helper.rb",
|
44
51
|
"spec/sk_sdk/ar_cli_spec.rb",
|
45
52
|
"spec/sk_sdk/oauth_spec.rb",
|
53
|
+
"spec/sk_sdk/resources/clients_spec.rb",
|
54
|
+
"spec/sk_sdk/resources/credit_note_spec.rb",
|
55
|
+
"spec/sk_sdk/resources/invoice_spec.rb",
|
56
|
+
"spec/sk_sdk/resources/product_spec.rb",
|
46
57
|
"spec/sk_sdk/signed_request_spec.rb",
|
47
58
|
"spec/spec_helper.rb"
|
48
59
|
]
|
@@ -0,0 +1,43 @@
|
|
1
|
+
CONNECTION = {
|
2
|
+
:site => "https://demo.dev.salesking.eu/api/",
|
3
|
+
# :site => "http://demo.salesking.local:3000/api/",
|
4
|
+
:user => "demo@salesking.eu",
|
5
|
+
:password => "demouser",
|
6
|
+
:format => :json
|
7
|
+
} unless defined?(CONNECTION)
|
8
|
+
|
9
|
+
# create all classes and set their connection
|
10
|
+
# instead of
|
11
|
+
# SK::SDK::ArCli.make(:client) unless Object.const_defined?('Client')
|
12
|
+
# Client.set_connection( CONNECTION )
|
13
|
+
[:client, :address, :credit_note, :line_item, :invoice, :product].each do |name|
|
14
|
+
class_name = "#{name}".camelize
|
15
|
+
SK::SDK::ArCli.make(class_name) unless Object.const_defined?(class_name)
|
16
|
+
class_name.constantize.set_connection( CONNECTION )
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
# check if a SalesKing instance is available by calling /users/current.json
|
21
|
+
def sk_available?
|
22
|
+
SK::SDK::ArCli.make(:user) unless Object.const_defined?('User')
|
23
|
+
User.set_connection( CONNECTION )
|
24
|
+
begin
|
25
|
+
User.get(:current)
|
26
|
+
rescue Errno::ECONNREFUSED #ActiveResource::ResourceNotFound => e
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def delete_test_data(doc, client)
|
34
|
+
doc.destroy
|
35
|
+
client.destroy
|
36
|
+
lambda {
|
37
|
+
doc = Invoice.find(doc.id)
|
38
|
+
}.should raise_error(ActiveResource::ResourceNotFound)
|
39
|
+
lambda {
|
40
|
+
client = Client.find(client.id)
|
41
|
+
}.should raise_error(ActiveResource::ResourceNotFound)
|
42
|
+
end
|
43
|
+
|
data/spec/sk_sdk/ar_cli_spec.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
require 'spec/spec_helper'
|
2
|
+
require 'spec/resources_spec_helper'
|
2
3
|
|
3
4
|
describe SK::SDK::ArCli, "make new class" do
|
4
5
|
|
5
|
-
before :all do
|
6
|
-
SK::SDK::ArCli.make(:client)
|
7
|
-
Client.set_connection( CONNECTION )
|
8
|
-
end
|
9
|
-
|
10
6
|
it "should create class" do
|
11
7
|
c = Client.new
|
12
8
|
c.first_name = 'herbert' # implicit setter
|
@@ -42,23 +38,4 @@ describe SK::SDK::ArCli, "make new class" do
|
|
42
38
|
c.id
|
43
39
|
}.should_not raise_error(RuntimeError)
|
44
40
|
end
|
45
|
-
end
|
46
|
-
|
47
|
-
if sk_available?
|
48
|
-
describe SK::SDK::ArCli, "with real connection" do
|
49
|
-
|
50
|
-
before :all do
|
51
|
-
SK::SDK::ArCli.make(:client) unless Object.const_defined?('Client')
|
52
|
-
Client.set_connection( CONNECTION )
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should save" do
|
56
|
-
c = Client.new :organisation=>"Rack'n Roll"
|
57
|
-
c.save.should be_true
|
58
|
-
c.id.should_not be_empty
|
59
|
-
c.number.should_not be_empty
|
60
|
-
end
|
61
|
-
end
|
62
|
-
else
|
63
|
-
puts "Sorry your local SalesKing server ain't running, skipping real connections tests"
|
64
|
-
end
|
41
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
= SalesKing SDK Resources Specs
|
2
|
+
|
3
|
+
The specs in here serve mainly as an example using the ActiveResource client
|
4
|
+
with username+password to CRUD objects against a real sk server.
|
5
|
+
|
6
|
+
Of course we also have internal specs for all api controllers but sometimes a
|
7
|
+
view from the outside can be revealing.
|
8
|
+
|
9
|
+
Please be nice and DON'T misuse those tests!
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/resources_spec_helper'
|
3
|
+
|
4
|
+
unless sk_available?
|
5
|
+
puts "Sorry cannot connect to your SalesKing server, skipping real connections tests. Please check connection settings in spec_helper"
|
6
|
+
else
|
7
|
+
|
8
|
+
describe Client, "with real connection" do
|
9
|
+
|
10
|
+
before :all do
|
11
|
+
@client = Client.new(:organisation=>'from testing API2')
|
12
|
+
@client.save
|
13
|
+
end
|
14
|
+
|
15
|
+
after :all do
|
16
|
+
#delete test client
|
17
|
+
@client.destroy
|
18
|
+
lambda {
|
19
|
+
client = Client.find(@client.id)
|
20
|
+
}.should raise_error(ActiveResource::ResourceNotFound)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should save" do
|
24
|
+
c = Client.new :organisation=>"Rack'n Roll"
|
25
|
+
c.save.should be_true
|
26
|
+
c.id.should_not be_empty
|
27
|
+
c.number.should_not be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should fail create a client" do
|
31
|
+
client = Client.new(:organisation=>'from testing API2')
|
32
|
+
client.bank_iban = 'safasf'
|
33
|
+
client.save.should == false
|
34
|
+
client.errors.count.should == 1
|
35
|
+
client.errors.full_messages.should == ["Bank iban is invalid"]
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should find a single client" do
|
39
|
+
client = Client.find(@client.id)
|
40
|
+
client.organisation.should == @client.organisation
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should find clients" do
|
44
|
+
clients = Client.find(:all)
|
45
|
+
clients.should_not be_empty
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
describe Client, "with addresses" do
|
51
|
+
|
52
|
+
before :all do
|
53
|
+
#setup test client to work with
|
54
|
+
@client = Client.new(:organisation=>'Second from testing API2',
|
55
|
+
:addresses => [{ :zip => '50374', :city => 'Cologne' }] )
|
56
|
+
|
57
|
+
@client.save
|
58
|
+
end
|
59
|
+
|
60
|
+
after :all do
|
61
|
+
@client.destroy
|
62
|
+
lambda {
|
63
|
+
client = Client.find(@client.id)
|
64
|
+
}.should raise_error(ActiveResource::ResourceNotFound)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should create an address" do
|
68
|
+
@client.addresses.length.should == 1
|
69
|
+
@client.addresses.first.zip.should == '50374'
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should edit an address" do
|
73
|
+
@client.addresses.length.should == 1
|
74
|
+
# puts @client.addresses.inspect
|
75
|
+
@client.addresses[0].zip = '40001'
|
76
|
+
@client.save
|
77
|
+
@client.addresses.length.should == 1
|
78
|
+
@client.addresses.first.zip.should == '40001'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should add an address" do
|
82
|
+
cnt_before = @client.addresses.length
|
83
|
+
adr = Address.new( { :zip => '37700', :city => 'Cologne' } )
|
84
|
+
@client.addresses << adr
|
85
|
+
@client.save
|
86
|
+
@client.addresses.length.should == cnt_before+1
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should destroy an address" do
|
90
|
+
cnt_before = @client.addresses.length
|
91
|
+
# adr = Address.new( { :zip => '696969', :city => 'Go eat It' } )
|
92
|
+
# @client.addresses << adr
|
93
|
+
# @client.save
|
94
|
+
@client.addresses.last._delete = 1
|
95
|
+
@client.save
|
96
|
+
@client.reload
|
97
|
+
@client.addresses.length.should == cnt_before-1
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/resources_spec_helper'
|
3
|
+
|
4
|
+
unless sk_available?
|
5
|
+
puts "Sorry cannot connect to your SalesKing server, skipping real connections tests. Please check connection settings in spec_helper"
|
6
|
+
else
|
7
|
+
|
8
|
+
describe CreditNote, "in general" do
|
9
|
+
|
10
|
+
before :all do
|
11
|
+
#setup test doc to work with
|
12
|
+
# create client
|
13
|
+
@client = Client.new(:organisation=>'Credit Note API-Tester')
|
14
|
+
@client.save.should be_true
|
15
|
+
@doc = CreditNote.new()
|
16
|
+
@doc.title = 'A Document from the API'
|
17
|
+
@doc.client_id = @client.id
|
18
|
+
@doc.save.should be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
after :all do
|
22
|
+
#delete test doc
|
23
|
+
@doc.destroy
|
24
|
+
@client.destroy
|
25
|
+
lambda {
|
26
|
+
doc = CreditNote.find(@doc.id)
|
27
|
+
}.should raise_error(ActiveResource::ResourceNotFound)
|
28
|
+
lambda {
|
29
|
+
client = Client.find(@client.id)
|
30
|
+
}.should raise_error(ActiveResource::ResourceNotFound)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should create a doc and use default before after text" do
|
34
|
+
@doc.errors.should be_empty
|
35
|
+
@doc.notes_before.should_not be_empty
|
36
|
+
@doc.new?.should be_false
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should fail create a doc" do
|
40
|
+
doc = CreditNote.new()
|
41
|
+
doc.save.should == false
|
42
|
+
doc.errors.count.should == 1
|
43
|
+
doc.errors.on(:client_id).should == "can't be blank"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should find a doc" do
|
47
|
+
doc = CreditNote.find(@doc.id)
|
48
|
+
doc.title.should == @doc.title
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should edit a doc" do
|
52
|
+
old_lock_version = @doc.lock_version
|
53
|
+
@doc.notes_before = 'You will recieve the amout of:'
|
54
|
+
@doc.notes_before = 'Payment made to you bank Account'
|
55
|
+
@doc.title = 'Changed doc title'
|
56
|
+
|
57
|
+
@doc.save.should be_true
|
58
|
+
@doc.lock_version.should > old_lock_version # because save returns the data
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should fail edit a doc" do
|
62
|
+
@doc.client_id = ''
|
63
|
+
@doc.save.should == false
|
64
|
+
@doc.errors.count.should == 1
|
65
|
+
@doc.errors.on(:client_id).should == "can't be blank"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe CreditNote, "with line items" do
|
70
|
+
|
71
|
+
before :all do
|
72
|
+
@client = Client.new(:organisation=>'Credit Note API-Tester')
|
73
|
+
@client.save.should be_true
|
74
|
+
#setup test doc to work with
|
75
|
+
@doc = CreditNote.new :client_id => @client.id,
|
76
|
+
:line_items =>[{ :position=>1, :description => 'Pork Chops',
|
77
|
+
:quantity => 12, :price_single =>'10.00'}]
|
78
|
+
@doc.save.should be_true
|
79
|
+
end
|
80
|
+
|
81
|
+
after :all do
|
82
|
+
@client.destroy #also destroys all docs
|
83
|
+
# @doc.destroy
|
84
|
+
lambda {
|
85
|
+
doc = CreditNote.find(@doc.id)
|
86
|
+
}.should raise_error(ActiveResource::ResourceNotFound)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should create a line item" do
|
90
|
+
@doc.line_items.length.should == 1
|
91
|
+
@doc.line_items.first.description.should == 'Pork Chops'
|
92
|
+
@doc.price_total.should == 120.0
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should edit line item" do
|
96
|
+
@doc.line_items[0].description = 'Egg Sandwich'
|
97
|
+
@doc.save
|
98
|
+
@doc.line_items.length.should == 1
|
99
|
+
@doc.line_items.first.description.should == 'Egg Sandwich'
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should add line item" do
|
103
|
+
item = LineItem.new :position=>2, :description => 'Goat-Pie',
|
104
|
+
:price_single => 10, :quantity=>10
|
105
|
+
@doc.line_items << item
|
106
|
+
@doc.save
|
107
|
+
@doc.line_items.length.should == 2
|
108
|
+
@doc.price_total.should == 220.0
|
109
|
+
# @doc.line_items[0].zip = '40001'
|
110
|
+
# @doc.line_items.[1].zip.should == '40001'
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/resources_spec_helper'
|
3
|
+
|
4
|
+
unless sk_available?
|
5
|
+
puts "Sorry cannot connect to your SalesKing server, skipping real connections tests. Please check connection settings in spec_helper"
|
6
|
+
else
|
7
|
+
|
8
|
+
describe Invoice, "in general" do
|
9
|
+
|
10
|
+
before :all do
|
11
|
+
@client = Client.new(:organisation=>'Invoice API-Tester')
|
12
|
+
@client.save.should be_true
|
13
|
+
@doc = Invoice.new()
|
14
|
+
@doc.title = 'A Document from the API'
|
15
|
+
@doc.client_id = @client.id
|
16
|
+
@doc.save.should be_true
|
17
|
+
end
|
18
|
+
|
19
|
+
after :all do
|
20
|
+
delete_test_data(@doc, @client)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should find a doc" do
|
24
|
+
doc = Invoice.find(@doc.id)
|
25
|
+
doc.title.should == @doc.title
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe Invoice, "a new invoice" do
|
30
|
+
|
31
|
+
before :all do
|
32
|
+
@client = Client.new(:organisation=>'Invoice API-Tester')
|
33
|
+
@client.save.should be_true
|
34
|
+
end
|
35
|
+
after :all do
|
36
|
+
@client.destroy
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should create a doc" do
|
40
|
+
doc = Invoice.new()
|
41
|
+
doc.title = 'A Document from the API'
|
42
|
+
doc.notes_before = 'Your shiny new invoice [number]'
|
43
|
+
doc.notes_after = 'Please pay me'
|
44
|
+
doc.client_id = @client.id
|
45
|
+
doc.save
|
46
|
+
doc.errors.should be_empty
|
47
|
+
doc.new?.should be_false
|
48
|
+
doc.notes_before.should == 'Your shiny new invoice [number]'
|
49
|
+
doc.destroy
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should create a doc with default before after texts" do
|
53
|
+
doc = Invoice.new()
|
54
|
+
doc.title = 'A Document from the API'
|
55
|
+
doc.client_id = @client.id
|
56
|
+
doc.save
|
57
|
+
doc.errors.should be_empty
|
58
|
+
doc.new?.should be_false
|
59
|
+
doc.notes_before.should_not be_empty
|
60
|
+
doc.destroy
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should fail create a doc" do
|
64
|
+
doc = Invoice.new()
|
65
|
+
doc.save.should == false
|
66
|
+
doc.errors.count.should == 1
|
67
|
+
doc.errors.on(:client_id).should == "can't be blank"
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
describe Invoice, "Edit an invoice" do
|
73
|
+
|
74
|
+
before :all do
|
75
|
+
#setup test doc to work with
|
76
|
+
# create client
|
77
|
+
@client = Client.new(:organisation=>'Invoice API-Tester')
|
78
|
+
@client.save.should be_true
|
79
|
+
@doc = Invoice.new()
|
80
|
+
@doc.title = 'A Document from the API'
|
81
|
+
@doc.notes_before = 'Your invoice [number]'
|
82
|
+
@doc.client_id = @client.id
|
83
|
+
@doc.save.should be_true
|
84
|
+
end
|
85
|
+
|
86
|
+
after :all do
|
87
|
+
delete_test_data(@doc, @client)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should edit a doc" do
|
91
|
+
old_lock_version = @doc.lock_version
|
92
|
+
@doc.notes_before.should == 'Your invoice [number]'
|
93
|
+
@doc.notes_before = 'You will recieve the amout of:'
|
94
|
+
@doc.notes_after = 'Payment made to you bank Account'
|
95
|
+
@doc.title = 'Changed doc title'
|
96
|
+
|
97
|
+
@doc.save.should be_true
|
98
|
+
@doc.lock_version.should > old_lock_version # because save returns the data
|
99
|
+
@doc.notes_before.should == 'You will recieve the amout of:'
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should fail edit without a client" do
|
103
|
+
@doc.client_id = ''
|
104
|
+
@doc.save.should == false
|
105
|
+
@doc.errors.count.should == 1
|
106
|
+
@doc.errors.on(:client_id).should == "can't be blank"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe Invoice, "with line items" do
|
111
|
+
|
112
|
+
before :all do
|
113
|
+
@client = Client.new(:organisation=>'Credit Note API-Tester')
|
114
|
+
@client.save.should be_true
|
115
|
+
#setup test doc to work with
|
116
|
+
@doc = Invoice.new(:client_id => @client.id,
|
117
|
+
:line_items => [{ :position=>1, :description => 'Pork Chops',
|
118
|
+
:quantity => 12, :price_single =>'10.00' }] )
|
119
|
+
@doc.save.should be_true
|
120
|
+
end
|
121
|
+
|
122
|
+
after :all do
|
123
|
+
delete_test_data(@doc, @client)
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should create a line item" do
|
127
|
+
@doc.line_items.length.should == 1
|
128
|
+
@doc.line_items.first.description.should == 'Pork Chops'
|
129
|
+
@doc.price_total.should == 120.0
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should edit line item" do
|
133
|
+
@doc.line_items[0].description = 'Egg Sandwich'
|
134
|
+
@doc.save
|
135
|
+
@doc.line_items.length.should == 1
|
136
|
+
@doc.line_items.first.description.should == 'Egg Sandwich'
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should add line item" do
|
140
|
+
item = LineItem.new( { :position=>2, :description => 'Goat-Pie', :price_single => 10, :quantity=>10} )
|
141
|
+
product = Product.new(:name=>'Eis am Stiel', :price => 1.50, :tax=>19, :description => 'Mmmhh lecker Eis')
|
142
|
+
product.save.should be_true
|
143
|
+
item1 = LineItem.new( { :position=>3, :use_product => 1, :product_id=> product.id, :quantity => 10 } )
|
144
|
+
@doc.line_items << item
|
145
|
+
@doc.line_items << item1
|
146
|
+
@doc.save
|
147
|
+
@doc.line_items.length.should == 3
|
148
|
+
@doc.price_total.should == 235.0
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/resources_spec_helper'
|
3
|
+
|
4
|
+
unless sk_available?
|
5
|
+
puts "Sorry cannot connect to your SalesKing server, skipping real connections tests. Please check connection settings in spec_helper"
|
6
|
+
else
|
7
|
+
|
8
|
+
describe Product, "in general" do
|
9
|
+
|
10
|
+
before :all do
|
11
|
+
#setup test product to work with
|
12
|
+
@product = Product.new(:name=>'Eis am Stiel', :price => 1.50)
|
13
|
+
@product.save.should be_true
|
14
|
+
end
|
15
|
+
|
16
|
+
after :all do
|
17
|
+
#delete test product
|
18
|
+
@product.destroy
|
19
|
+
lambda {
|
20
|
+
product = Product.find(@product.id)
|
21
|
+
}.should raise_error(ActiveResource::ResourceNotFound)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should create a product" do
|
25
|
+
@product.number.should_not be_nil
|
26
|
+
@product.price.should == 1.50
|
27
|
+
@product.new?.should be_false
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should fail create a product without name" do
|
31
|
+
product = Product.new(:price => 2.50)
|
32
|
+
product.save.should == false
|
33
|
+
product.errors.count.should == 1
|
34
|
+
product.errors.full_messages.should == ["Name can't be blank"]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should fail create a product with empty price" do
|
38
|
+
product = Product.new(:name => 'No brain', :price =>' ')
|
39
|
+
product.save.should be_false
|
40
|
+
product.errors.full_messages.should == ["Price can't be blank", "Price is not a number"]
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should find a product by id" do
|
44
|
+
product = Product.find(@product.id)
|
45
|
+
product.name.should == @product.name
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should edit a product" do
|
49
|
+
@product.name = 'A new product name'
|
50
|
+
@product.lock_version.should == 0
|
51
|
+
@product.save
|
52
|
+
@product.lock_version.should == 1 # because save returns the data
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should fail edit a product" do
|
56
|
+
@product.name = ''
|
57
|
+
@product.save.should == false
|
58
|
+
@product.errors.count.should == 1
|
59
|
+
@product.errors.on(:name).should == "can't be blank"
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -15,21 +15,3 @@ puts "Testing with ActiveResource v: #{ActiveResource::VERSION::STRING}."
|
|
15
15
|
def load_settings
|
16
16
|
@set ||= YAML.load_file(File.join(File.dirname(__FILE__), 'settings.yml'))
|
17
17
|
end
|
18
|
-
|
19
|
-
CONNECTION = {
|
20
|
-
:site => "http://demo.salesking.local:3000/api/",
|
21
|
-
:user => "demo@salesking.eu",
|
22
|
-
:password => "demo",
|
23
|
-
:format => :json
|
24
|
-
} unless defined?(CONNECTION)
|
25
|
-
|
26
|
-
def sk_available?
|
27
|
-
SK::SDK::ArCli.make(:user) unless Object.const_defined?('User')
|
28
|
-
User.set_connection( CONNECTION )
|
29
|
-
begin
|
30
|
-
User.get(:current)
|
31
|
-
rescue Errno::ECONNREFUSED #ActiveResource::ResourceNotFound => e
|
32
|
-
return false
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sk_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Georg Leciejewski
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-01 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -97,9 +97,15 @@ files:
|
|
97
97
|
- lib/sk_sdk/oauth.rb
|
98
98
|
- lib/sk_sdk/signed_request.rb
|
99
99
|
- sk_sdk.gemspec
|
100
|
+
- spec/resources_spec_helper.rb
|
100
101
|
- spec/settings.yml
|
101
102
|
- spec/sk_sdk/ar_cli_spec.rb
|
102
103
|
- spec/sk_sdk/oauth_spec.rb
|
104
|
+
- spec/sk_sdk/resources/README.rdoc
|
105
|
+
- spec/sk_sdk/resources/clients_spec.rb
|
106
|
+
- spec/sk_sdk/resources/credit_note_spec.rb
|
107
|
+
- spec/sk_sdk/resources/invoice_spec.rb
|
108
|
+
- spec/sk_sdk/resources/product_spec.rb
|
103
109
|
- spec/sk_sdk/signed_request_spec.rb
|
104
110
|
- spec/spec_helper.rb
|
105
111
|
has_rdoc: true
|
@@ -137,7 +143,12 @@ signing_key:
|
|
137
143
|
specification_version: 3
|
138
144
|
summary: SalesKing SDK Ruby
|
139
145
|
test_files:
|
146
|
+
- spec/resources_spec_helper.rb
|
140
147
|
- spec/sk_sdk/ar_cli_spec.rb
|
141
148
|
- spec/sk_sdk/oauth_spec.rb
|
149
|
+
- spec/sk_sdk/resources/clients_spec.rb
|
150
|
+
- spec/sk_sdk/resources/credit_note_spec.rb
|
151
|
+
- spec/sk_sdk/resources/invoice_spec.rb
|
152
|
+
- spec/sk_sdk/resources/product_spec.rb
|
142
153
|
- spec/sk_sdk/signed_request_spec.rb
|
143
154
|
- spec/spec_helper.rb
|