pg_morph 0.3.0 → 1.0.0
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 +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +13 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +38 -2
- data/Guardfile +9 -0
- data/README.md +16 -4
- data/Rakefile +7 -0
- data/lib/pg_morph/adapter.rb +6 -5
- data/lib/pg_morph/naming.rb +0 -8
- data/lib/pg_morph/polymorphic.rb +89 -49
- data/lib/pg_morph/version.rb +1 -1
- data/pg_morph.gemspec +3 -1
- data/spec/dummy/db/schema.rb +11 -14
- data/spec/lib/pg_morph/adapter_integration_spec.rb +263 -0
- data/spec/{pg_morph → lib/pg_morph}/adapter_spec.rb +0 -9
- data/spec/{pg_morph → lib/pg_morph}/naming_spec.rb +0 -4
- data/spec/lib/pg_morph/polymorphic_integration_spec.rb +125 -0
- data/spec/{pg_morph → lib/pg_morph}/polymorphic_spec.rb +44 -34
- data/spec/spec_helper.rb +8 -0
- metadata +65 -51
- data/spec/pg_morph/adapter_integration_spec.rb +0 -89
- data/spec/pg_morph/polymorphic_integration_spec.rb +0 -86
@@ -13,21 +13,53 @@ describe PgMorph::Polymorphic do
|
|
13
13
|
|
14
14
|
it { expect(@polymorphic.child_table).to eq(:bars) }
|
15
15
|
|
16
|
+
describe "#base_table" do
|
17
|
+
it "sets default base table" do
|
18
|
+
expect(@polymorphic.base_table).to eq(:foos_base)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "sets base table with options" do
|
22
|
+
polymorphic = PgMorph::Polymorphic.new(:foos, :bars, column: :baz, base_table: :base)
|
23
|
+
expect(polymorphic.base_table).to eq(:base)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#rename_base_table_sql' do
|
28
|
+
it 'returns proper sql if there is no base table yet' do
|
29
|
+
expect(@polymorphic.rename_base_table_sql.squeeze(' ')).to eq %Q{
|
30
|
+
ALTER TABLE foos RENAME TO foos_base;
|
31
|
+
}.squeeze(' ')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns empty string if base table exists' do
|
35
|
+
expect(@polymorphic).to receive(:can_rename_to_base_table?).and_return(false)
|
36
|
+
expect(@polymorphic.rename_base_table_sql.squeeze(' ')).to eq ''
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#create_base_table_view_sql' do
|
41
|
+
it 'returns proper sql' do
|
42
|
+
expect(@polymorphic.create_base_table_view_sql).to eq %Q{
|
43
|
+
CREATE OR REPLACE VIEW foos AS SELECT * FROM foos_base;
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
16
48
|
describe '#create_proxy_table_sql' do
|
17
|
-
it do
|
18
|
-
@polymorphic.create_proxy_table_sql.squeeze(' ').
|
49
|
+
it 'generates proper sql' do
|
50
|
+
expect(@polymorphic.create_proxy_table_sql.squeeze(' ')).to eq %Q{
|
19
51
|
CREATE TABLE foos_bars (
|
20
52
|
CHECK (baz_type = 'Bar'),
|
21
53
|
PRIMARY KEY (id),
|
22
54
|
FOREIGN KEY (baz_id) REFERENCES bars(id)
|
23
|
-
) INHERITS (
|
55
|
+
) INHERITS (foos_base);
|
24
56
|
}.squeeze(' ')
|
25
57
|
end
|
26
58
|
end
|
27
59
|
|
28
60
|
describe '#create_before_insert_trigger_fun_sql' do
|
29
|
-
it '' do
|
30
|
-
@polymorphic.
|
61
|
+
it 'generates proper sql' do
|
62
|
+
expect(@polymorphic).to receive(:before_insert_trigger_content)
|
31
63
|
|
32
64
|
@polymorphic.create_before_insert_trigger_fun_sql
|
33
65
|
end
|
@@ -35,7 +67,7 @@ describe PgMorph::Polymorphic do
|
|
35
67
|
|
36
68
|
describe '#create_trigger_body' do
|
37
69
|
it 'returns proper sql for new trigger' do
|
38
|
-
@polymorphic.send(:create_trigger_body).squeeze(' ').
|
70
|
+
expect(@polymorphic.send(:create_trigger_body).squeeze(' ')).to eq %Q{
|
39
71
|
IF (NEW.baz_type = 'Bar') THEN
|
40
72
|
INSERT INTO foos_bars VALUES (NEW.*);
|
41
73
|
}.squeeze(' ')
|
@@ -43,8 +75,8 @@ describe PgMorph::Polymorphic do
|
|
43
75
|
end
|
44
76
|
|
45
77
|
describe '#before_insert_trigger_content' do
|
46
|
-
it '' do
|
47
|
-
@polymorphic.send(:before_insert_trigger_content) { 'my block' }.squeeze(' ').
|
78
|
+
it 'generate proper sql' do
|
79
|
+
expect(@polymorphic.send(:before_insert_trigger_content) { 'my block' }.squeeze(' ')).to eq %Q{
|
48
80
|
CREATE OR REPLACE FUNCTION foos_baz_fun() RETURNS TRIGGER AS $$
|
49
81
|
BEGIN
|
50
82
|
my block
|
@@ -57,42 +89,20 @@ describe PgMorph::Polymorphic do
|
|
57
89
|
end
|
58
90
|
end
|
59
91
|
|
60
|
-
describe '#create_after_insert_trigger_fun_sql' do
|
61
|
-
it do
|
62
|
-
@polymorphic.create_after_insert_trigger_fun_sql.squeeze(' ').should == %Q{
|
63
|
-
CREATE OR REPLACE FUNCTION delete_from_foos_master_fun() RETURNS TRIGGER AS $$
|
64
|
-
BEGIN
|
65
|
-
DELETE FROM ONLY foos WHERE id = NEW.id;
|
66
|
-
RETURN NEW;
|
67
|
-
END; $$ LANGUAGE plpgsql;
|
68
|
-
}.squeeze(' ')
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe '#create_after_insert_trigger_sql' do
|
73
|
-
it do
|
74
|
-
@polymorphic.create_after_insert_trigger_sql.squeeze(' ').should == %Q{
|
75
|
-
DROP TRIGGER IF EXISTS foos_after_insert_trigger ON foos;
|
76
|
-
CREATE TRIGGER foos_after_insert_trigger
|
77
|
-
AFTER INSERT ON foos
|
78
|
-
FOR EACH ROW EXECUTE PROCEDURE delete_from_foos_master_fun();
|
79
|
-
}.squeeze(' ')
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
92
|
describe '#remove_before_insert_trigger_sql' do
|
84
93
|
it 'raise error if no function' do
|
85
|
-
|
86
|
-
.
|
94
|
+
expect { @polymorphic.remove_before_insert_trigger_sql }
|
95
|
+
.to raise_error PG::Error
|
87
96
|
end
|
88
97
|
|
89
98
|
it 'returns proper sql for single child table' do
|
90
99
|
@polymorphic.stub(:get_function).with('foos_baz_fun').and_return('')
|
91
100
|
|
92
|
-
@polymorphic.remove_before_insert_trigger_sql.squeeze(' ').
|
101
|
+
expect(@polymorphic.remove_before_insert_trigger_sql.squeeze(' ')).to eq %Q{
|
93
102
|
DROP TRIGGER foos_baz_insert_trigger ON foos;
|
94
103
|
DROP FUNCTION foos_baz_fun();
|
95
104
|
}.squeeze(' ')
|
96
105
|
end
|
97
106
|
end
|
107
|
+
|
98
108
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
if ENV['CODECLIMATE_REPO_TOKEN']
|
2
|
+
require "codeclimate-test-reporter"
|
3
|
+
CodeClimate::TestReporter.start
|
4
|
+
else
|
5
|
+
require 'simplecov'
|
6
|
+
SimpleCov.start
|
7
|
+
end
|
8
|
+
|
1
9
|
ENV["RAILS_ENV"] ||= 'test'
|
2
10
|
require File.expand_path("../dummy/config/environment", __FILE__)
|
3
11
|
require 'rspec/rails'
|
metadata
CHANGED
@@ -1,126 +1,139 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_morph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Hanka Seweryn
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-03-18 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activerecord
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '3'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '3'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rails
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '3'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '3'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: pg
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0.17'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0.17'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: codeclimate-test-reporter
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.4'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.4'
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
70
|
name: rspec-rails
|
64
71
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
72
|
requirements:
|
67
|
-
- -
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.14'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.14'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
68
88
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
89
|
+
version: '4.2'
|
70
90
|
type: :development
|
71
91
|
prerelease: false
|
72
92
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
93
|
requirements:
|
75
|
-
- -
|
94
|
+
- - "~>"
|
76
95
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
96
|
+
version: '4.2'
|
78
97
|
- !ruby/object:Gem::Dependency
|
79
98
|
name: rake
|
80
99
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
100
|
requirements:
|
83
|
-
- - ~>
|
101
|
+
- - "~>"
|
84
102
|
- !ruby/object:Gem::Version
|
85
103
|
version: '10.3'
|
86
104
|
type: :development
|
87
105
|
prerelease: false
|
88
106
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
107
|
requirements:
|
91
|
-
- - ~>
|
108
|
+
- - "~>"
|
92
109
|
- !ruby/object:Gem::Version
|
93
110
|
version: '10.3'
|
94
111
|
- !ruby/object:Gem::Dependency
|
95
112
|
name: pry
|
96
113
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
114
|
requirements:
|
99
|
-
- - ~>
|
115
|
+
- - "~>"
|
100
116
|
- !ruby/object:Gem::Version
|
101
117
|
version: '0.10'
|
102
118
|
type: :development
|
103
119
|
prerelease: false
|
104
120
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
121
|
requirements:
|
107
|
-
- - ~>
|
122
|
+
- - "~>"
|
108
123
|
- !ruby/object:Gem::Version
|
109
124
|
version: '0.10'
|
110
125
|
- !ruby/object:Gem::Dependency
|
111
126
|
name: awesome_print
|
112
127
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
128
|
requirements:
|
115
|
-
- - ~>
|
129
|
+
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
131
|
version: '1.2'
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
135
|
requirements:
|
123
|
-
- - ~>
|
136
|
+
- - "~>"
|
124
137
|
- !ruby/object:Gem::Version
|
125
138
|
version: '1.2'
|
126
139
|
description: Takes care of postgres DB consistency for ActiveRecord polymorphic associations
|
@@ -131,9 +144,12 @@ executables: []
|
|
131
144
|
extensions: []
|
132
145
|
extra_rdoc_files: []
|
133
146
|
files:
|
134
|
-
- .gitignore
|
147
|
+
- ".gitignore"
|
148
|
+
- ".travis.yml"
|
149
|
+
- CHANGELOG.md
|
135
150
|
- Gemfile
|
136
151
|
- Gemfile.lock
|
152
|
+
- Guardfile
|
137
153
|
- LICENSE.txt
|
138
154
|
- README.md
|
139
155
|
- Rakefile
|
@@ -175,36 +191,35 @@ files:
|
|
175
191
|
- spec/dummy/db/migrate/20140401124727_create_likes.rb
|
176
192
|
- spec/dummy/db/schema.rb
|
177
193
|
- spec/dummy/db/seeds.rb
|
178
|
-
- spec/pg_morph/adapter_integration_spec.rb
|
179
|
-
- spec/pg_morph/adapter_spec.rb
|
180
|
-
- spec/pg_morph/naming_spec.rb
|
181
|
-
- spec/pg_morph/polymorphic_integration_spec.rb
|
182
|
-
- spec/pg_morph/polymorphic_spec.rb
|
194
|
+
- spec/lib/pg_morph/adapter_integration_spec.rb
|
195
|
+
- spec/lib/pg_morph/adapter_spec.rb
|
196
|
+
- spec/lib/pg_morph/naming_spec.rb
|
197
|
+
- spec/lib/pg_morph/polymorphic_integration_spec.rb
|
198
|
+
- spec/lib/pg_morph/polymorphic_spec.rb
|
183
199
|
- spec/spec_helper.rb
|
184
200
|
homepage: https://github.com/LunarLogic/pg_morph
|
185
201
|
licenses:
|
186
202
|
- MIT
|
203
|
+
metadata: {}
|
187
204
|
post_install_message:
|
188
205
|
rdoc_options: []
|
189
206
|
require_paths:
|
190
207
|
- lib
|
191
208
|
required_ruby_version: !ruby/object:Gem::Requirement
|
192
|
-
none: false
|
193
209
|
requirements:
|
194
|
-
- -
|
210
|
+
- - ">="
|
195
211
|
- !ruby/object:Gem::Version
|
196
212
|
version: '0'
|
197
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
|
-
none: false
|
199
214
|
requirements:
|
200
|
-
- -
|
215
|
+
- - ">="
|
201
216
|
- !ruby/object:Gem::Version
|
202
217
|
version: '0'
|
203
218
|
requirements: []
|
204
219
|
rubyforge_project:
|
205
|
-
rubygems_version:
|
220
|
+
rubygems_version: 2.2.2
|
206
221
|
signing_key:
|
207
|
-
specification_version:
|
222
|
+
specification_version: 4
|
208
223
|
summary: Takes care of postgres DB consistency for ActiveRecord polymorphic associations
|
209
224
|
test_files:
|
210
225
|
- spec/dummy/.rspec
|
@@ -237,10 +252,9 @@ test_files:
|
|
237
252
|
- spec/dummy/db/migrate/20140401124727_create_likes.rb
|
238
253
|
- spec/dummy/db/schema.rb
|
239
254
|
- spec/dummy/db/seeds.rb
|
240
|
-
- spec/pg_morph/adapter_integration_spec.rb
|
241
|
-
- spec/pg_morph/adapter_spec.rb
|
242
|
-
- spec/pg_morph/naming_spec.rb
|
243
|
-
- spec/pg_morph/polymorphic_integration_spec.rb
|
244
|
-
- spec/pg_morph/polymorphic_spec.rb
|
255
|
+
- spec/lib/pg_morph/adapter_integration_spec.rb
|
256
|
+
- spec/lib/pg_morph/adapter_spec.rb
|
257
|
+
- spec/lib/pg_morph/naming_spec.rb
|
258
|
+
- spec/lib/pg_morph/polymorphic_integration_spec.rb
|
259
|
+
- spec/lib/pg_morph/polymorphic_spec.rb
|
245
260
|
- spec/spec_helper.rb
|
246
|
-
has_rdoc:
|
@@ -1,89 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe PgMorph::Adapter do
|
4
|
-
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
|
5
|
-
include PgMorph::Adapter
|
6
|
-
|
7
|
-
def run(query)
|
8
|
-
ActiveRecord::Base.connection.select_value(query)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
before do
|
13
|
-
@adapter = ActiveRecord::Base.connection
|
14
|
-
@comments_polymorphic = PgMorph::Polymorphic.new(:likes, :comments, column: :likeable)
|
15
|
-
@posts_polymorphic = PgMorph::Polymorphic.new(:likes, :posts, column: :likeable)
|
16
|
-
begin
|
17
|
-
Like.destroy_all
|
18
|
-
Comment.destroy_all
|
19
|
-
@adapter.remove_polymorphic_foreign_key(:likes, :comments, column: :likeable)
|
20
|
-
@adapter.remove_polymorphic_foreign_key(:likes, :posts, column: :likeable)
|
21
|
-
rescue
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
after do
|
26
|
-
begin
|
27
|
-
@adapter.add_polymorphic_foreign_key(:likes, :comments, column: :likeable)
|
28
|
-
rescue
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#add_polymorphic_foreign_key' do
|
33
|
-
it 'creates proxy table' do
|
34
|
-
@adapter.add_polymorphic_foreign_key(:likes, :comments, column: :likeable)
|
35
|
-
|
36
|
-
expect(@adapter.run('SELECT id FROM likes_comments')).to be_nil
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe '#remove_polymorphic_foreign_key' do
|
41
|
-
it 'removes proxy table' do
|
42
|
-
@adapter.add_polymorphic_foreign_key(:likes, :comments, column: :likeable)
|
43
|
-
expect(@adapter.run('SELECT id FROM likes_comments')).to be_nil
|
44
|
-
|
45
|
-
@adapter.remove_polymorphic_foreign_key(:likes, :comments, column: :likeable)
|
46
|
-
|
47
|
-
-> { @adapter.run('SELECT id FROM likes_comments') }
|
48
|
-
.should raise_error ActiveRecord::StatementInvalid
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe 'assertions to a partition' do
|
53
|
-
it 'works properly' do
|
54
|
-
# new record inserted correctly
|
55
|
-
@adapter.add_polymorphic_foreign_key(:likes, :comments, column: :likeable)
|
56
|
-
comment = Comment.create(content: 'comment')
|
57
|
-
like = Like.create(likeable: comment)
|
58
|
-
|
59
|
-
expect(Like.count).to eq(1)
|
60
|
-
expect(like.id).to eq(Like.last.id)
|
61
|
-
|
62
|
-
# new record with more partition tables inserted correctly
|
63
|
-
@adapter.add_polymorphic_foreign_key(:likes, :posts, column: :likeable)
|
64
|
-
post = Post.create(content: 'content')
|
65
|
-
like2 = Like.create(likeable: post)
|
66
|
-
|
67
|
-
expect(Like.count).to eq(2)
|
68
|
-
expect(like2.id).to eq(Like.last.id)
|
69
|
-
|
70
|
-
# after removing partition row not inserted
|
71
|
-
like.destroy
|
72
|
-
expect(Like.count).to eq(1)
|
73
|
-
@adapter.remove_polymorphic_foreign_key(:likes, :comments, column: :likeable)
|
74
|
-
|
75
|
-
-> { Like.create(likeable: comment) }
|
76
|
-
.should raise_error ActiveRecord::StatementInvalid
|
77
|
-
|
78
|
-
# if no partitions row inserted correctly
|
79
|
-
like2.destroy
|
80
|
-
expect(Like.count).to eq(0)
|
81
|
-
@adapter.remove_polymorphic_foreign_key(:likes, :posts, column: :likeable)
|
82
|
-
like4 = Like.create(likeable: post)
|
83
|
-
|
84
|
-
expect(Like.count).to eq(1)
|
85
|
-
expect(like4.id).to eq(Like.last.id)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|