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