sunstone 6.1.0.2 → 6.1.3
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.
- checksums.yaml +4 -4
- data/ext/active_record/finder_methods.rb +2 -1
- data/lib/active_record/connection_adapters/sunstone/column.rb +1 -1
- data/lib/sunstone/version.rb +1 -1
- metadata +18 -58
- data/.github/workflows/main.yml +0 -141
- data/.gitignore +0 -31
- data/.tm_properties +0 -1
- data/Gemfile +0 -4
- data/README.md +0 -46
- data/Rakefile +0 -37
- data/TODO.md +0 -89
- data/sunstone.gemspec +0 -40
- data/test/active_record/associations/belongs_to_test.rb +0 -162
- data/test/active_record/associations/has_and_belongs_to_many_test.rb +0 -125
- data/test/active_record/associations/has_many_test.rb +0 -244
- data/test/active_record/eager_loading_test.rb +0 -62
- data/test/active_record/persistance_test.rb +0 -184
- data/test/active_record/preload_test.rb +0 -51
- data/test/active_record/query/all_test.rb +0 -33
- data/test/active_record/query/count_test.rb +0 -51
- data/test/active_record/query/distinct_test.rb +0 -30
- data/test/active_record/query/find_test.rb +0 -37
- data/test/active_record/query/limit_test.rb +0 -19
- data/test/active_record/query/order_test.rb +0 -27
- data/test/active_record/query/where_test.rb +0 -79
- data/test/active_record/query_test.rb +0 -131
- data/test/active_record/rpc_test.rb +0 -30
- data/test/schema_mock.rb +0 -121
- data/test/sunstone/connection/column_definition_test.rb +0 -30
- data/test/sunstone/connection/configuration_test.rb +0 -44
- data/test/sunstone/connection/cookie_store_test.rb +0 -37
- data/test/sunstone/connection/request_helper_test.rb +0 -105
- data/test/sunstone/connection/send_request_test.rb +0 -164
- data/test/sunstone/connection_test.rb +0 -23
- data/test/test_helper.rb +0 -153
data/sunstone.gemspec
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require File.expand_path("../lib/sunstone/version", __FILE__)
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = "sunstone"
|
5
|
-
s.version = Sunstone::VERSION
|
6
|
-
s.authors = ["Jon Bracy"]
|
7
|
-
s.email = ["jonbracy@gmail.com"]
|
8
|
-
s.homepage = "http://sunstonerb.com"
|
9
|
-
s.summary = %q{A library for interacting with REST APIs}
|
10
|
-
s.description = %q{A library for interacting with REST APIs. Similar to ActiveResource}
|
11
|
-
|
12
|
-
s.files = `git ls-files`.split("\n")
|
13
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
15
|
-
s.require_paths = ["lib"]
|
16
|
-
s.required_ruby_version = '>= 2.6'
|
17
|
-
|
18
|
-
# Developoment
|
19
|
-
s.add_development_dependency 'rake'
|
20
|
-
s.add_development_dependency 'rdoc'
|
21
|
-
# s.add_development_dependency 'sdoc'
|
22
|
-
s.add_development_dependency 'bundler'
|
23
|
-
s.add_development_dependency 'minitest'
|
24
|
-
s.add_development_dependency 'minitest-reporters'
|
25
|
-
s.add_development_dependency 'mocha'
|
26
|
-
s.add_development_dependency 'faker'
|
27
|
-
s.add_development_dependency 'factory_bot'
|
28
|
-
s.add_development_dependency 'webmock'
|
29
|
-
#s.add_development_dependency 'sdoc-templates-42floors'
|
30
|
-
s.add_development_dependency 'rgeo'
|
31
|
-
s.add_development_dependency 'simplecov'
|
32
|
-
s.add_development_dependency 'byebug'
|
33
|
-
s.add_development_dependency 'activesupport', '>= 6.1.0'
|
34
|
-
|
35
|
-
# Runtime
|
36
|
-
s.add_runtime_dependency 'msgpack'
|
37
|
-
s.add_runtime_dependency 'cookie_store'
|
38
|
-
s.add_runtime_dependency 'activerecord', '>= 6.1.0'
|
39
|
-
s.add_runtime_dependency 'arel-extensions', '>= 6.1.0'
|
40
|
-
end
|
@@ -1,162 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ActiveRecord::Associations::BelongsToTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
schema do
|
6
|
-
create_table "ships" do |t|
|
7
|
-
t.string "name", limit: 255
|
8
|
-
t.integer "fleet_id"
|
9
|
-
end
|
10
|
-
|
11
|
-
create_table "fleets" do |t|
|
12
|
-
t.string "name", limit: 255
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class Fleet < ActiveRecord::Base
|
17
|
-
has_many :ships
|
18
|
-
end
|
19
|
-
|
20
|
-
class Ship < ActiveRecord::Base
|
21
|
-
belongs_to :fleet
|
22
|
-
end
|
23
|
-
|
24
|
-
# Save includes =============================================================
|
25
|
-
|
26
|
-
test '#save new record includes new belongs_to associations' do
|
27
|
-
ship = Ship.new(name: 'Definant', fleet: Fleet.new(name: 'Armada Duo'))
|
28
|
-
|
29
|
-
req_stub = webmock(:post, '/ships', {include: :fleet}).with(
|
30
|
-
body: {
|
31
|
-
ship: { name: 'Definant', fleet_attributes: { name: 'Armada Duo' } }
|
32
|
-
}.to_json
|
33
|
-
).to_return(
|
34
|
-
body: {
|
35
|
-
id: 2,
|
36
|
-
fleet_id: 3,
|
37
|
-
name: 'Definant 001',
|
38
|
-
fleet: { id: 3, name: 'Armada 2' }
|
39
|
-
}.to_json
|
40
|
-
)
|
41
|
-
|
42
|
-
assert ship.save
|
43
|
-
assert_equal 2, ship.id
|
44
|
-
assert_equal 3, ship.fleet_id
|
45
|
-
assert_equal 3, ship.fleet.id
|
46
|
-
assert_equal 'Definant 001', ship.name
|
47
|
-
assert_equal 'Armada 2', ship.fleet.name
|
48
|
-
|
49
|
-
assert_requested req_stub
|
50
|
-
end
|
51
|
-
|
52
|
-
test '#save new record doesnt include persisted/unmodified belongs_to associations' do
|
53
|
-
webmock(:get, "/fleets", where: {id: 1}, limit: 1).to_return(
|
54
|
-
body: [{id: 1, name: 'Armada Original'}].to_json
|
55
|
-
)
|
56
|
-
|
57
|
-
fleet = Fleet.find(1)
|
58
|
-
ship = Ship.new(name: 'Definant', fleet: fleet)
|
59
|
-
|
60
|
-
req_stub = webmock(:post, '/ships').with(
|
61
|
-
body: {
|
62
|
-
ship: { name: 'Definant', fleet_id: 1 }
|
63
|
-
}.to_json
|
64
|
-
).to_return(
|
65
|
-
body: {
|
66
|
-
id: 2,
|
67
|
-
fleet_id: 1,
|
68
|
-
name: 'Definant 001'
|
69
|
-
}.to_json
|
70
|
-
)
|
71
|
-
|
72
|
-
assert ship.save
|
73
|
-
assert_equal 2, ship.id
|
74
|
-
assert_equal 1, ship.fleet_id
|
75
|
-
|
76
|
-
assert_requested req_stub
|
77
|
-
end
|
78
|
-
|
79
|
-
test '#save persisted record includes new belongs_to associations' do
|
80
|
-
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
81
|
-
body: [{id: 1, fleet_id: nil, name: 'Ship Uno'}].to_json
|
82
|
-
)
|
83
|
-
|
84
|
-
req_stub = webmock(:patch, '/ships/1', {include: :fleet}).with(
|
85
|
-
body: {
|
86
|
-
ship: { fleet_attributes: { name: 'Armada Duo' } }
|
87
|
-
}.to_json
|
88
|
-
).to_return(
|
89
|
-
body: {
|
90
|
-
id: 1, fleet_id: 2, name: 'Ship Uno',
|
91
|
-
fleet: { id: 2, name: 'Armada Duo' }
|
92
|
-
}.to_json
|
93
|
-
)
|
94
|
-
|
95
|
-
ship = Ship.find(1)
|
96
|
-
ship.fleet = Fleet.new(name: 'Armada Duo')
|
97
|
-
|
98
|
-
ship.save
|
99
|
-
|
100
|
-
assert_requested req_stub
|
101
|
-
end
|
102
|
-
|
103
|
-
test '#save persisted record doesnt include persisted/unmodified belongs_to associations but updates belongs_to key' do
|
104
|
-
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
105
|
-
body: [{id: 1, fleet_id: nil, name: 'Ship Uno'}].to_json
|
106
|
-
)
|
107
|
-
webmock(:get, "/fleets", where: {id: 1}, limit: 1).to_return(
|
108
|
-
body: [{id: 1, name: 'Armada Original'}].to_json
|
109
|
-
)
|
110
|
-
|
111
|
-
fleet = Fleet.find(1)
|
112
|
-
ship = Ship.find(1)
|
113
|
-
|
114
|
-
req_stub = webmock(:patch, '/ships/1').with(
|
115
|
-
body: {
|
116
|
-
ship: { fleet_id: 1 }
|
117
|
-
}.to_json
|
118
|
-
).to_return(
|
119
|
-
body: {
|
120
|
-
id: 1,
|
121
|
-
fleet_id: 1,
|
122
|
-
name: 'My Ship'
|
123
|
-
}.to_json
|
124
|
-
)
|
125
|
-
|
126
|
-
ship.fleet = fleet
|
127
|
-
assert ship.save
|
128
|
-
assert_equal 1, ship.id
|
129
|
-
assert_equal 1, ship.fleet_id
|
130
|
-
assert_equal 'My Ship', ship.name
|
131
|
-
|
132
|
-
assert_requested req_stub
|
133
|
-
end
|
134
|
-
|
135
|
-
test '#save persisted record doesnt include loaded belongs_to association' do
|
136
|
-
webmock(:get, "/ships", where: {id: 1}, limit: 1, include: [:fleet]).to_return(
|
137
|
-
body: [{id: 1, fleet_id: 1, name: 'Ship Uno', fleet: {id: 1, name: 'Armada Original'}}].to_json
|
138
|
-
)
|
139
|
-
|
140
|
-
ship = Ship.eager_load(:fleet).find(1)
|
141
|
-
|
142
|
-
req_stub = webmock(:patch, '/ships/1').with(
|
143
|
-
body: {
|
144
|
-
ship: { name: 'New NAME!!' }
|
145
|
-
}.to_json
|
146
|
-
).to_return(
|
147
|
-
body: {
|
148
|
-
id: 1,
|
149
|
-
fleet_id: 1,
|
150
|
-
name: 'New NAME!!'
|
151
|
-
}.to_json
|
152
|
-
)
|
153
|
-
|
154
|
-
|
155
|
-
assert ship.association(:fleet).loaded?
|
156
|
-
ship.name = 'New NAME!!'
|
157
|
-
assert ship.save
|
158
|
-
|
159
|
-
assert_requested req_stub
|
160
|
-
end
|
161
|
-
|
162
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ActiveRecord::Associations::HasAndBelongsToManyTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
schema do
|
6
|
-
create_table "ships" do |t|
|
7
|
-
t.string "name", limit: 255
|
8
|
-
end
|
9
|
-
|
10
|
-
create_table "sailors" do |t|
|
11
|
-
t.string "name", limit: 255
|
12
|
-
end
|
13
|
-
|
14
|
-
create_table "sailors_ships", id: false do |t|
|
15
|
-
t.integer "ship_id", null: false
|
16
|
-
t.integer "sailor_id", null: false
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class Ship < ActiveRecord::Base
|
21
|
-
has_and_belongs_to_many :sailors
|
22
|
-
end
|
23
|
-
|
24
|
-
class Sailor < ActiveRecord::Base
|
25
|
-
has_and_belongs_to_many :ships
|
26
|
-
end
|
27
|
-
|
28
|
-
test '#relation_ids' do
|
29
|
-
webmock(:get, "/ships", where: {id: 42}, limit: 1).to_return(body: [{id: 42, name: "The Niña"}].to_json)
|
30
|
-
webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 42}}}).to_return(body: [{id: 43, name: "Chris"}].to_json)
|
31
|
-
|
32
|
-
assert_equal [43], Ship.find(42).sailor_ids
|
33
|
-
end
|
34
|
-
|
35
|
-
test '#update habtm relationships' do
|
36
|
-
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
37
|
-
body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
|
38
|
-
)
|
39
|
-
webmock(:get, "/sailors", where: {id: 1}, limit: 1).to_return(
|
40
|
-
body: [{id: 1, name: 'Captain'}].to_json
|
41
|
-
)
|
42
|
-
webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 1}}}).to_return(
|
43
|
-
body: [].to_json
|
44
|
-
)
|
45
|
-
req_stub = webmock(:patch, '/ships/1').with(
|
46
|
-
body: {ship: {sailors_attributes: [{id: 1}]}}.to_json
|
47
|
-
).to_return(
|
48
|
-
body: {id: 1, name: 'Armada Uno'}.to_json
|
49
|
-
)
|
50
|
-
|
51
|
-
ship = Ship.find(1)
|
52
|
-
assert ship.update(sailors: [Sailor.find(1)])
|
53
|
-
assert_requested req_stub
|
54
|
-
end
|
55
|
-
|
56
|
-
test '#update clears habtm relationship' do
|
57
|
-
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
58
|
-
body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
|
59
|
-
)
|
60
|
-
webmock(:get, "/sailors", where: {id: 1}, limit: 1).to_return(
|
61
|
-
body: [{id: 1, name: 'Captain'}].to_json
|
62
|
-
)
|
63
|
-
webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 1}}}).to_return(
|
64
|
-
body: [{id: 1, name: 'Captain'}].to_json
|
65
|
-
)
|
66
|
-
req_stub = webmock(:patch, '/ships/1').with(
|
67
|
-
body: {ship: {sailors_attributes: []}}.to_json
|
68
|
-
).to_return(
|
69
|
-
body: {id: 1, name: 'Armada Uno'}.to_json
|
70
|
-
)
|
71
|
-
|
72
|
-
ship = Ship.find(1)
|
73
|
-
assert ship.update(sailors: [])
|
74
|
-
assert_requested req_stub
|
75
|
-
end
|
76
|
-
|
77
|
-
test '#save persisted record doesnt include loaded habtm association' do
|
78
|
-
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
79
|
-
body: [{id: 1, name: 'Armada Uno'}].to_json
|
80
|
-
)
|
81
|
-
webmock(:get, "/sailors", where: {id: 1}, limit: 1).to_return(
|
82
|
-
body: [{id: 1, name: 'Captain'}].to_json
|
83
|
-
)
|
84
|
-
webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 1}}}).to_return(
|
85
|
-
body: [{id: 1, name: 'Captain'}].to_json
|
86
|
-
)
|
87
|
-
|
88
|
-
ship = Ship.find(1)
|
89
|
-
|
90
|
-
|
91
|
-
req_stub = webmock(:patch, '/ships/1').with(
|
92
|
-
body: {
|
93
|
-
ship: { name: 'New NAME!!' }
|
94
|
-
}.to_json
|
95
|
-
).to_return(
|
96
|
-
body: {
|
97
|
-
id: 1,
|
98
|
-
name: 'New NAME!!'
|
99
|
-
}.to_json
|
100
|
-
)
|
101
|
-
|
102
|
-
ship.sailors.load
|
103
|
-
assert ship.sailors.loaded?
|
104
|
-
ship.name = 'New NAME!!'
|
105
|
-
assert ship.save
|
106
|
-
|
107
|
-
assert_requested req_stub
|
108
|
-
end
|
109
|
-
|
110
|
-
|
111
|
-
test "#destroy with habtm relationship" do
|
112
|
-
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
113
|
-
body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
|
114
|
-
)
|
115
|
-
req_stub = webmock(:delete, '/ships/1').to_return(
|
116
|
-
status: 204
|
117
|
-
)
|
118
|
-
|
119
|
-
ship = Ship.find(1)
|
120
|
-
assert ship.destroy
|
121
|
-
assert_requested req_stub
|
122
|
-
end
|
123
|
-
|
124
|
-
|
125
|
-
end
|
@@ -1,244 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ActiveRecord::Associations::HasManyTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
schema do
|
6
|
-
create_table "ships" do |t|
|
7
|
-
t.string "name", limit: 255
|
8
|
-
t.integer "fleet_id"
|
9
|
-
end
|
10
|
-
|
11
|
-
create_table "fleets" do |t|
|
12
|
-
t.string "name", limit: 255
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class Fleet < ActiveRecord::Base
|
17
|
-
has_many :ships
|
18
|
-
end
|
19
|
-
|
20
|
-
class Ship < ActiveRecord::Base
|
21
|
-
belongs_to :fleet
|
22
|
-
end
|
23
|
-
|
24
|
-
# ID Setters ================================================================
|
25
|
-
|
26
|
-
test '#create with has_many_ids=' do
|
27
|
-
webmock(:get, "/ships", where: {id: 2}).to_return(body: [{id: 2, fleet_id: nil, name: 'Duo'}].to_json)
|
28
|
-
webmock(:post, "/fleets").with(
|
29
|
-
body: {
|
30
|
-
fleet: {
|
31
|
-
name: 'Spanish Armada',
|
32
|
-
ships_attributes: [{id: 2}]
|
33
|
-
}
|
34
|
-
}
|
35
|
-
).to_return(body: {id: 42, name: "Spanish Armada"}.to_json)
|
36
|
-
|
37
|
-
Fleet.create(name: 'Spanish Armada', ship_ids: [2])
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
test '#update with has_many_ids=' do
|
42
|
-
webmock(:get, "/fleets", where: {id: 42}, limit: 1).to_return(body: [{id: 42, name: "Spanish Armada"}].to_json)
|
43
|
-
webmock(:get, "/ships", where: {id: 2}).to_return(body: [{id: 2, fleet_id: nil, name: 'Duo'}].to_json)
|
44
|
-
webmock(:get, "/ships", where: {fleet_id: 42}).to_return(body: [].to_json)
|
45
|
-
|
46
|
-
webmock(:patch, "/fleets/42").with(
|
47
|
-
body: {
|
48
|
-
fleet: {
|
49
|
-
ships_attributes: [{id: 2}]
|
50
|
-
}
|
51
|
-
}).to_return(body: {id: 42, name: "Spanish Armada"}.to_json)
|
52
|
-
|
53
|
-
Fleet.find(42).update(ship_ids: ["2"])
|
54
|
-
end
|
55
|
-
|
56
|
-
# Modifing relationship ====================================================
|
57
|
-
|
58
|
-
test '#save persisted records includes has_many associations when new record added' do
|
59
|
-
webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
|
60
|
-
body: [{
|
61
|
-
id: 1,
|
62
|
-
name: 'Armada Trio',
|
63
|
-
ships: [
|
64
|
-
{id: 2, fleet_id: 1, name: 'Definant'}
|
65
|
-
]
|
66
|
-
}].to_json
|
67
|
-
})
|
68
|
-
|
69
|
-
webmock(:get, '/ships', where: {id: 3}, limit: 1).to_return({
|
70
|
-
body: [{id: 3, fleet_id: nil, name: 'Enterprise'}].to_json
|
71
|
-
})
|
72
|
-
|
73
|
-
req_stub = webmock(:patch, '/fleets/1').with(
|
74
|
-
body: {
|
75
|
-
fleet: {
|
76
|
-
ships_attributes: [{ id: 2 }, {id: 3 }]
|
77
|
-
}
|
78
|
-
}.to_json
|
79
|
-
).to_return(
|
80
|
-
body: {
|
81
|
-
id: 1,
|
82
|
-
name: 'Armada Trio',
|
83
|
-
ships: [{ id: 2, fleet_id: 1, name: 'Voyager' }]
|
84
|
-
}.to_json
|
85
|
-
)
|
86
|
-
|
87
|
-
# fleet.ships = [ship]
|
88
|
-
fleet = Fleet.eager_load(:ships).find(1)
|
89
|
-
fleet.update(ships: fleet.ships + [Ship.find(3)])
|
90
|
-
|
91
|
-
assert_requested req_stub
|
92
|
-
end
|
93
|
-
|
94
|
-
test '#save persisted records includes has_many associations when replaced with new record' do
|
95
|
-
webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
|
96
|
-
body: [{
|
97
|
-
id: 1,
|
98
|
-
name: 'Armada Trio',
|
99
|
-
ships: [
|
100
|
-
{id: 2, fleet_id: 1, name: 'Definant'}
|
101
|
-
]
|
102
|
-
}].to_json
|
103
|
-
})
|
104
|
-
|
105
|
-
req_stub = webmock(:patch, '/fleets/1').with(
|
106
|
-
body: {
|
107
|
-
fleet: {
|
108
|
-
ships_attributes: [{ name: 'Voyager' }]
|
109
|
-
}
|
110
|
-
}.to_json
|
111
|
-
).to_return(
|
112
|
-
body: {
|
113
|
-
id: 1,
|
114
|
-
name: 'Armada Trio',
|
115
|
-
ships: [{ id: 3, fleet_id: 1, name: 'Voyager' }]
|
116
|
-
}.to_json
|
117
|
-
)
|
118
|
-
|
119
|
-
fleet = Fleet.eager_load(:ships).find(1)
|
120
|
-
assert fleet.update(ships: [Ship.new(name: 'Voyager')])
|
121
|
-
assert_equal 1, fleet.id
|
122
|
-
assert_equal [3], fleet.ships.map(&:id)
|
123
|
-
|
124
|
-
assert_requested req_stub
|
125
|
-
end
|
126
|
-
|
127
|
-
test '#save persisted records includes has_many associations when updating record in relationship' do
|
128
|
-
webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
|
129
|
-
body: [{
|
130
|
-
id: 1,
|
131
|
-
name: 'Armada Trio',
|
132
|
-
ships: [
|
133
|
-
{id: 2, fleet_id: 1, name: 'Definant'}, {id: 3, fleet_id: 1, name: 'Enterprise'}
|
134
|
-
]
|
135
|
-
}].to_json
|
136
|
-
})
|
137
|
-
|
138
|
-
req_stub = webmock(:patch, '/fleets/1').with(
|
139
|
-
body: {
|
140
|
-
fleet: {
|
141
|
-
ships_attributes: [{ name: 'Voyager', id: 2 }, {id: 3}]
|
142
|
-
}
|
143
|
-
}.to_json
|
144
|
-
).to_return(
|
145
|
-
body: {
|
146
|
-
id: 1,
|
147
|
-
name: 'Armada Trio',
|
148
|
-
ships: [{ id: 2, fleet_id: 1, name: 'Voyager' }, {id: 3, fleet_id: 1, name: 'Enterprise'}]
|
149
|
-
}.to_json
|
150
|
-
)
|
151
|
-
|
152
|
-
fleet = Fleet.eager_load(:ships).find(1)
|
153
|
-
fleet.ships.first.name = 'Voyager'
|
154
|
-
fleet.save
|
155
|
-
|
156
|
-
assert_requested req_stub
|
157
|
-
end
|
158
|
-
|
159
|
-
test '#save persisted records doesnt include any loaded has_many associations' do
|
160
|
-
webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
|
161
|
-
body: [{
|
162
|
-
id: 1,
|
163
|
-
name: 'Armada Trio',
|
164
|
-
ships: [
|
165
|
-
{id: 2, fleet_id: 1, name: 'Definant'}, {id: 3, fleet_id: 1, name: 'Enterprise'}
|
166
|
-
]
|
167
|
-
}].to_json
|
168
|
-
})
|
169
|
-
|
170
|
-
req_stub = webmock(:patch, '/fleets/1').with(
|
171
|
-
body: { fleet: { name: 'New NAME!!' } }.to_json
|
172
|
-
).to_return(
|
173
|
-
body: {
|
174
|
-
id: 1,
|
175
|
-
name: 'New NAME!!'
|
176
|
-
}.to_json
|
177
|
-
)
|
178
|
-
|
179
|
-
# fleet.ships = [ship]
|
180
|
-
fleet = Fleet.eager_load(:ships).find(1)
|
181
|
-
assert fleet.ships.loaded?
|
182
|
-
fleet.name = 'New NAME!!'
|
183
|
-
fleet.save
|
184
|
-
|
185
|
-
assert_requested req_stub
|
186
|
-
end
|
187
|
-
|
188
|
-
test '#update persisted record doesnt include any unchanged associations' do
|
189
|
-
webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
|
190
|
-
body: [{
|
191
|
-
id: 1,
|
192
|
-
name: 'Armada Trio',
|
193
|
-
ships: [
|
194
|
-
{id: 2, fleet_id: 1, name: 'Definant'}, {id: 3, fleet_id: 1, name: 'Enterprise'}
|
195
|
-
]
|
196
|
-
}].to_json
|
197
|
-
})
|
198
|
-
|
199
|
-
req_stub = webmock(:patch, '/fleets/1').with(
|
200
|
-
body: { fleet: { name: 'New NAME!!' } }.to_json
|
201
|
-
).to_return(
|
202
|
-
body: {
|
203
|
-
id: 1,
|
204
|
-
name: 'New NAME!!'
|
205
|
-
}.to_json
|
206
|
-
)
|
207
|
-
|
208
|
-
# fleet.ships = [ship]
|
209
|
-
fleet = Fleet.eager_load(:ships).find(1)
|
210
|
-
assert fleet.ships.loaded?
|
211
|
-
#[{id: 2, fleet_id: 1, name: 'Definant'}, {id: 3, fleet_id: 1, name: 'Enterprise'}]
|
212
|
-
fleet.update(name: 'New NAME!!', ships: fleet.ships)
|
213
|
-
fleet.save
|
214
|
-
|
215
|
-
assert_requested req_stub
|
216
|
-
end
|
217
|
-
|
218
|
-
# Clearing the relationship =================================================
|
219
|
-
|
220
|
-
test '#update clears has_many relationship' do
|
221
|
-
webmock(:get, "/fleets", where: {id: 1}, limit: 1).to_return(
|
222
|
-
body: [{id: 1, name: 'Armada Uno'}].to_json
|
223
|
-
)
|
224
|
-
webmock(:get, "/ships", where: {fleet_id: 1}).to_return(
|
225
|
-
body: [{id: 1, name: 'Saucer Trio'}].to_json
|
226
|
-
)
|
227
|
-
req_stub = webmock(:patch, '/fleets/1').with(
|
228
|
-
body: {fleet: {ships_attributes: []}}.to_json
|
229
|
-
).to_return(
|
230
|
-
body: {id: 1, name: 'Armada Uno'}.to_json
|
231
|
-
)
|
232
|
-
|
233
|
-
fleet = Fleet.find(1)
|
234
|
-
assert fleet.update(ships: [])
|
235
|
-
assert_requested req_stub
|
236
|
-
end
|
237
|
-
|
238
|
-
|
239
|
-
# test 'relation#delete_all' do
|
240
|
-
# webmock(:get, "/fleets", where: {id: 42}, limit: 1).to_return(body: [{id: 42, name: "Spanish Armada"}].to_json)
|
241
|
-
# Fleet.find(42).ships.delete_all
|
242
|
-
# end
|
243
|
-
|
244
|
-
end
|