rating 0.9.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -10
  3. data/README.md +40 -16
  4. data/lib/rating/models/rating/extension.rb +1 -2
  5. data/lib/rating/models/rating/rate.rb +3 -7
  6. data/lib/rating/models/rating/rating.rb +25 -5
  7. data/lib/rating/version.rb +1 -1
  8. metadata +56 -122
  9. data/spec/config/rate_table_spec.rb +0 -17
  10. data/spec/config/rating_table_spec.rb +0 -17
  11. data/spec/config/validations_spec.rb +0 -33
  12. data/spec/factories/article.rb +0 -7
  13. data/spec/factories/author.rb +0 -7
  14. data/spec/factories/category.rb +0 -7
  15. data/spec/factories/comment.rb +0 -5
  16. data/spec/factories/global.rb +0 -6
  17. data/spec/factories/rating/rate.rb +0 -10
  18. data/spec/factories/rating/rating.rb +0 -12
  19. data/spec/models/extension/after_create_spec.rb +0 -47
  20. data/spec/models/extension/order_by_rating_spec.rb +0 -180
  21. data/spec/models/extension/rate_for_spec.rb +0 -41
  22. data/spec/models/extension/rate_spec.rb +0 -60
  23. data/spec/models/extension/rated_question_spec.rb +0 -48
  24. data/spec/models/extension/rated_records_spec.rb +0 -12
  25. data/spec/models/extension/rated_spec.rb +0 -50
  26. data/spec/models/extension/rates_records_spec.rb +0 -12
  27. data/spec/models/extension/rates_spec.rb +0 -50
  28. data/spec/models/extension/rating_records_spec.rb +0 -12
  29. data/spec/models/extension/rating_spec.rb +0 -40
  30. data/spec/models/extension/rating_warm_up_spec.rb +0 -115
  31. data/spec/models/extension/unscoped_rating_spec.rb +0 -121
  32. data/spec/models/rate/create_spec.rb +0 -364
  33. data/spec/models/rate/rate_for_spec.rb +0 -107
  34. data/spec/models/rate_spec.rb +0 -28
  35. data/spec/models/rating/averager_data_spec.rb +0 -32
  36. data/spec/models/rating/data_spec.rb +0 -48
  37. data/spec/models/rating/update_rating_spec.rb +0 -48
  38. data/spec/models/rating/values_data_spec.rb +0 -40
  39. data/spec/models/rating_spec.rb +0 -24
  40. data/spec/rails_helper.rb +0 -17
  41. data/spec/support/common.rb +0 -22
  42. data/spec/support/database_cleaner.rb +0 -19
  43. data/spec/support/db/migrate/add_comment_on_rating_rates_table.rb +0 -8
  44. data/spec/support/db/migrate/add_extra_fields_on_rating_rates_table.rb +0 -8
  45. data/spec/support/db/migrate/create_articles_table.rb +0 -9
  46. data/spec/support/db/migrate/create_authors_table.rb +0 -9
  47. data/spec/support/db/migrate/create_categories_table.rb +0 -12
  48. data/spec/support/db/migrate/create_comments_table.rb +0 -7
  49. data/spec/support/db/migrate/create_globals_table.rb +0 -8
  50. data/spec/support/db/migrate/create_rates_table.rb +0 -19
  51. data/spec/support/db/migrate/create_rating_table.rb +0 -20
  52. data/spec/support/db/migrate/create_review_ratings_table.rb +0 -17
  53. data/spec/support/db/migrate/create_reviews_table.rb +0 -15
  54. data/spec/support/factory_bot.rb +0 -9
  55. data/spec/support/migrate.rb +0 -20
  56. data/spec/support/models/article.rb +0 -7
  57. data/spec/support/models/author.rb +0 -5
  58. data/spec/support/models/category.rb +0 -6
  59. data/spec/support/models/comment.rb +0 -5
  60. data/spec/support/models/global.rb +0 -7
  61. data/spec/support/models/review.rb +0 -5
  62. data/spec/support/models/review_rating.rb +0 -4
  63. data/spec/support/shared_context/with_database_records.rb +0 -20
  64. data/spec/support/shoulda.rb +0 -10
@@ -1,121 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Rating::Extension, 'unscoped_rating' do
6
- let!(:author_1) { create :author }
7
- let!(:author_2) { create :author }
8
- let!(:scope) { create :category }
9
-
10
- context 'when is false' do
11
- let!(:resource) { create :article }
12
-
13
- it 'groups in different line record' do
14
- author_1.rate resource, 1, scope: scope
15
- author_2.rate resource, 2, scope: scope
16
- author_1.rate resource, 5
17
-
18
- ratings = Rating::Rating.all.order('id')
19
-
20
- expect(ratings.size).to eq 2
21
-
22
- rating = ratings[0]
23
-
24
- expect(rating.average.to_s).to eq '1.5'
25
- expect(rating.estimate.to_s).to eq '1.5'
26
- expect(rating.resource).to eq resource
27
- expect(rating.scopeable).to eq scope
28
- expect(rating.sum).to eq 3
29
- expect(rating.total).to eq 2
30
-
31
- rating = ratings[1]
32
-
33
- expect(rating.average.to_s).to eq '5.0'
34
- expect(rating.estimate.to_s).to eq '5.0'
35
- expect(rating.resource).to eq resource
36
- expect(rating.scopeable).to eq nil
37
- expect(rating.sum).to eq 5
38
- expect(rating.total).to eq 1
39
- end
40
- end
41
-
42
- context 'when is true' do
43
- let!(:resource) { create :global }
44
-
45
- it 'groups in the same line record' do
46
- author_1.rate resource, 1, scope: scope
47
- author_2.rate resource, 2, scope: scope
48
- author_1.rate resource, 5
49
-
50
- ratings = Rating::Rating.all.order('id')
51
-
52
- expect(ratings.size).to eq 1
53
-
54
- rating = ratings[0]
55
-
56
- expect(rating.average.to_s).to eq '2.6666666666666667'
57
- expect(rating.estimate.to_s).to eq '2.6666666666666667'
58
- expect(rating.resource).to eq resource
59
- expect(rating.scopeable).to eq nil
60
- expect(rating.sum).to eq 8
61
- expect(rating.total).to eq 3
62
- end
63
- end
64
-
65
- context 'when is true' do
66
- let!(:resource) { create :global }
67
-
68
- it 'groups in the same line record' do
69
- author_1.rate resource, 1, scope: scope
70
- author_2.rate resource, 2, scope: scope
71
- author_1.rate resource, 5
72
-
73
- ratings = Rating::Rating.all.order('id')
74
-
75
- expect(ratings.size).to eq 1
76
-
77
- rating = ratings[0]
78
-
79
- expect(rating.average.to_s).to eq '2.6666666666666667'
80
- expect(rating.estimate.to_s).to eq '2.6666666666666667'
81
- expect(rating.resource).to eq resource
82
- expect(rating.scopeable).to eq nil
83
- expect(rating.sum).to eq 8
84
- expect(rating.total).to eq 3
85
- end
86
- end
87
-
88
- context 'when is true and have a non scopeable record first on dabase' do
89
- let!(:resource) { create :global }
90
-
91
- before { ::Rating::Rating.create resource: resource, scopeable: scope }
92
-
93
- it 'groups in the line with no scope' do
94
- author_1.rate resource, 1, scope: scope
95
- author_2.rate resource, 2, scope: scope
96
- author_1.rate resource, 5
97
-
98
- ratings = Rating::Rating.all.order('id')
99
-
100
- expect(ratings.size).to eq 2
101
-
102
- rating = ratings[0]
103
-
104
- expect(rating.average.to_s).to eq '0.0'
105
- expect(rating.estimate.to_s).to eq '0.0'
106
- expect(rating.resource).to eq resource
107
- expect(rating.scopeable).to eq scope
108
- expect(rating.sum).to eq 0
109
- expect(rating.total).to eq 0
110
-
111
- rating = ratings[1]
112
-
113
- expect(rating.average.to_s).to eq '2.6666666666666667'
114
- expect(rating.estimate.to_s).to eq '2.6666666666666667'
115
- expect(rating.resource).to eq resource
116
- expect(rating.scopeable).to eq nil
117
- expect(rating.sum).to eq 8
118
- expect(rating.total).to eq 3
119
- end
120
- end
121
- end
@@ -1,364 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Rating::Rate, ':create' do
6
- let!(:author) { create :author }
7
- let!(:article) { create :article }
8
-
9
- context 'with no scopeable' do
10
- before { described_class.create author: author, extra_scopes: {}, metadata: {}, resource: article, value: 3 }
11
-
12
- context 'when rate does not exist yet' do
13
- it 'creates a rate entry' do
14
- rate = described_class.last
15
-
16
- expect(rate.author).to eq author
17
- expect(rate.resource).to eq article
18
- expect(rate.value).to eq 3
19
- end
20
-
21
- it 'creates a rating entry' do
22
- rating = Rating::Rating.last
23
-
24
- expect(rating.average).to eq 3
25
- expect(rating.estimate).to eq 3
26
- expect(rating.resource).to eq article
27
- expect(rating.sum).to eq 3
28
- expect(rating.total).to eq 1
29
- end
30
- end
31
-
32
- context 'when rate already exists' do
33
- let!(:author_2) { create :author }
34
-
35
- before { described_class.create author: author_2, extra_scopes: {}, metadata: {}, resource: article, value: 4 }
36
-
37
- it 'creates one more rate entry' do
38
- rates = described_class.where(author: [author, author_2]).order('created_at asc')
39
-
40
- expect(rates.size).to eq 2
41
-
42
- rate = rates[0]
43
-
44
- expect(rate.author).to eq author
45
- expect(rate.resource).to eq article
46
- expect(rate.value).to eq 3
47
-
48
- rate = rates[1]
49
-
50
- expect(rate.author).to eq author_2
51
- expect(rate.resource).to eq article
52
- expect(rate.value).to eq 4
53
- end
54
-
55
- it 'updates the unique rating entry' do
56
- rating = Rating::Rating.find_by(resource: article)
57
-
58
- expect(rating.average).to eq 3.5
59
- expect(rating.estimate).to eq 3.5
60
- expect(rating.resource).to eq article
61
- expect(rating.sum).to eq 7
62
- expect(rating.total).to eq 2
63
- end
64
- end
65
- end
66
-
67
- context 'with scopeable' do
68
- let!(:category) { create :category }
69
-
70
- before do
71
- described_class.create(
72
- author: author,
73
- extra_scopes: {},
74
- metadata: {},
75
- resource: article,
76
- scopeable: category,
77
- value: 3
78
- )
79
- end
80
-
81
- context 'when rate does not exist yet' do
82
- it 'creates a rate entry' do
83
- rate = described_class.last
84
-
85
- expect(rate.author).to eq author
86
- expect(rate.resource).to eq article
87
- expect(rate.scopeable).to eq category
88
- expect(rate.value).to eq 3
89
- end
90
-
91
- it 'creates a rating entry' do
92
- rating = Rating::Rating.last
93
-
94
- expect(rating.average).to eq 3
95
- expect(rating.estimate).to eq 3
96
- expect(rating.resource).to eq article
97
- expect(rating.scopeable).to eq category
98
- expect(rating.sum).to eq 3
99
- expect(rating.total).to eq 1
100
- end
101
- end
102
-
103
- context 'when rate already exists' do
104
- let!(:author_2) { create :author }
105
-
106
- before do
107
- described_class.create(
108
- author: author_2,
109
- extra_scopes: {},
110
- metadata: {},
111
- resource: article,
112
- scopeable: category,
113
- value: 4
114
- )
115
- end
116
-
117
- it 'creates one more rate entry' do
118
- rates = described_class.where(author: [author, author_2]).order('created_at asc')
119
-
120
- expect(rates.size).to eq 2
121
-
122
- rate = rates[0]
123
-
124
- expect(rate.author).to eq author
125
- expect(rate.resource).to eq article
126
- expect(rate.scopeable).to eq category
127
- expect(rate.value).to eq 3
128
-
129
- rate = rates[1]
130
-
131
- expect(rate.author).to eq author_2
132
- expect(rate.resource).to eq article
133
- expect(rate.scopeable).to eq category
134
- expect(rate.value).to eq 4
135
- end
136
-
137
- it 'updates the unique rating entry' do
138
- rating = Rating::Rating.find_by(resource: article, scopeable: category)
139
-
140
- expect(rating.average).to eq 3.5
141
- expect(rating.estimate).to eq 3.5
142
- expect(rating.resource).to eq article
143
- expect(rating.scopeable).to eq category
144
- expect(rating.sum).to eq 7
145
- expect(rating.total).to eq 2
146
- end
147
- end
148
- end
149
-
150
- context 'with metadata' do
151
- context 'with nil value' do
152
- it 'creates a rate entry ignoring metadata' do
153
- described_class.create author: author, extra_scopes: {}, metadata: nil, resource: article, value: 3
154
-
155
- rate = described_class.last
156
-
157
- expect(rate.author).to eq author
158
- expect(rate.comment).to eq nil
159
- expect(rate.resource).to eq article
160
- expect(rate.value).to eq 3
161
- end
162
- end
163
-
164
- context 'with empty value' do
165
- it 'creates a rate entry ignoring metadata' do
166
- described_class.create author: author, extra_scopes: {}, metadata: '', resource: article, value: 3
167
-
168
- rate = described_class.last
169
-
170
- expect(rate.author).to eq author
171
- expect(rate.comment).to eq nil
172
- expect(rate.resource).to eq article
173
- expect(rate.value).to eq 3
174
- end
175
- end
176
-
177
- context 'with hash value' do
178
- it 'creates a rate entry with metadata included' do
179
- described_class.create(
180
- author: author,
181
- extra_scopes: {},
182
- metadata: { comment: 'comment' },
183
- resource: article,
184
- value: 3
185
- )
186
-
187
- rate = described_class.last
188
-
189
- expect(rate.author).to eq author
190
- expect(rate.comment).to eq 'comment'
191
- expect(rate.resource).to eq article
192
- expect(rate.value).to eq 3
193
- end
194
- end
195
- end
196
-
197
- if ENV['CONFIG_ENABLED_WITH_EXTRA_SCOPES'] == 'true'
198
- context 'with extra scopes' do
199
- let!(:category) { create :category }
200
-
201
- it 'creates a rate entry' do
202
- described_class.create(
203
- author: author,
204
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
205
- metadata: {},
206
- resource: article,
207
- scopeable: category,
208
- value: 1
209
- )
210
-
211
- rate = described_class.last
212
-
213
- expect(rate.author).to eq author
214
- expect(rate.resource).to eq article
215
- expect(rate.scope_1).to eq 'scope_1'
216
- expect(rate.scope_2).to eq 'scope_2'
217
- expect(rate.scopeable).to eq category
218
- expect(rate.value).to eq 1
219
- end
220
-
221
- it 'creates a rating entry' do
222
- described_class.create(
223
- author: author,
224
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
225
- metadata: {},
226
- resource: article,
227
- scopeable: category,
228
- value: 1
229
- )
230
-
231
- rating = Rating::Rating.last
232
-
233
- expect(rating.average).to eq 1
234
- expect(rating.estimate).to eq 1
235
- expect(rating.resource).to eq article
236
- expect(rating.scopeable).to eq category
237
- expect(rating.sum).to eq 1
238
- expect(rating.total).to eq 1
239
- end
240
-
241
- context 'when rate already exists' do
242
- before do
243
- described_class.create(
244
- author: author,
245
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
246
- metadata: {},
247
- resource: article,
248
- scopeable: category,
249
- value: 1
250
- )
251
- end
252
-
253
- it 'updates the rate entry' do
254
- described_class.create(
255
- author: author,
256
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
257
- metadata: {},
258
- resource: article,
259
- scopeable: category,
260
- value: 2
261
- )
262
-
263
- rates = described_class.all
264
-
265
- expect(rates.size).to eq 1
266
-
267
- rate = rates[0]
268
-
269
- expect(rate.author).to eq author
270
- expect(rate.resource).to eq article
271
- expect(rate.scope_1).to eq 'scope_1'
272
- expect(rate.scope_2).to eq 'scope_2'
273
- expect(rate.scopeable).to eq category
274
- expect(rate.value).to eq 2
275
- end
276
-
277
- it 'updates the unique rating entry' do
278
- described_class.create(
279
- author: author,
280
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
281
- metadata: {},
282
- resource: article,
283
- scopeable: category,
284
- value: 2
285
- )
286
-
287
- ratings = Rating::Rating.all
288
-
289
- expect(ratings.size).to eq 1
290
-
291
- rating = ratings[0]
292
-
293
- expect(rating.average).to eq 2
294
- expect(rating.estimate).to eq 2
295
- expect(rating.resource).to eq article
296
- expect(rating.scopeable).to eq category
297
- expect(rating.sum).to eq 2
298
- expect(rating.total).to eq 1
299
- end
300
- end
301
-
302
- context 'when rate already exists but with at least one extra scope different' do
303
- before do
304
- described_class.create(
305
- author: author,
306
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
307
- metadata: {},
308
- resource: article,
309
- scopeable: category,
310
- value: 1
311
- )
312
-
313
- described_class.create(
314
- author: author,
315
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_missing' },
316
- metadata: {},
317
- resource: article,
318
- scopeable: category,
319
- value: 2
320
- )
321
- end
322
-
323
- it 'creates a new rate entry' do
324
- rates = described_class.all
325
-
326
- expect(rates.size).to eq 2
327
-
328
- rate = rates[0]
329
-
330
- expect(rate.author).to eq author
331
- expect(rate.resource).to eq article
332
- expect(rate.scope_1).to eq 'scope_1'
333
- expect(rate.scope_2).to eq 'scope_2'
334
- expect(rate.scopeable).to eq category
335
- expect(rate.value).to eq 1
336
-
337
- rate = rates[1]
338
-
339
- expect(rate.author).to eq author
340
- expect(rate.resource).to eq article
341
- expect(rate.scope_1).to eq 'scope_1'
342
- expect(rate.scope_2).to eq 'scope_missing'
343
- expect(rate.scopeable).to eq category
344
- expect(rate.value).to eq 2
345
- end
346
-
347
- it 'updates the unique rating entry' do
348
- ratings = Rating::Rating.all
349
-
350
- expect(ratings.size).to eq 1
351
-
352
- rating = ratings[0]
353
-
354
- expect(rating.average).to eq 1.5
355
- expect(rating.estimate).to eq 1.5
356
- expect(rating.resource).to eq article
357
- expect(rating.scopeable).to eq category
358
- expect(rating.sum).to eq 3
359
- expect(rating.total).to eq 2
360
- end
361
- end
362
- end
363
- end
364
- end
@@ -1,107 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Rating::Rate, ':rate_for' do
6
- let!(:author) { create :author }
7
- let!(:article) { create :article }
8
-
9
- context 'with no scopeable' do
10
- context 'when rate does not exist' do
11
- it { expect(described_class.rate_for(author: author, resource: article)).to eq nil }
12
- end
13
-
14
- context 'when rate exists' do
15
- let!(:record) do
16
- described_class.create author: author, extra_scopes: {}, metadata: {}, resource: article, value: 3
17
- end
18
-
19
- it 'returns the record' do
20
- expect(described_class.rate_for(author: author, resource: article)).to eq record
21
- end
22
- end
23
- end
24
-
25
- context 'with scopeable' do
26
- let!(:category) { create :category }
27
-
28
- context 'when rate does not exist' do
29
- it do
30
- expect(described_class.rate_for(author: author, resource: article, scopeable: category)).to eq nil
31
- end
32
- end
33
-
34
- context 'when rate exists' do
35
- let!(:record) do
36
- described_class.create(
37
- author: author,
38
- extra_scopes: {},
39
- metadata: {},
40
- resource: article,
41
- scopeable: category,
42
- value: 3
43
- )
44
- end
45
-
46
- it 'returns the record' do
47
- query = described_class.rate_for(author: author, resource: article, scopeable: category)
48
-
49
- expect(query).to eq record
50
- end
51
- end
52
- end
53
-
54
- if ENV['CONFIG_ENABLED_WITH_EXTRA_SCOPES'] == 'true'
55
- context 'with extra scopes' do
56
- let!(:category) { create :category }
57
-
58
- context 'when matches all attributes including the extra scopes' do
59
- let!(:record) do
60
- described_class.create(
61
- author: author,
62
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
63
- metadata: {},
64
- resource: article,
65
- scopeable: category,
66
- value: 1
67
- )
68
- end
69
-
70
- it 'returns the record' do
71
- result = described_class.rate_for(
72
- author: author,
73
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
74
- resource: article,
75
- scopeable: category
76
- )
77
-
78
- expect(result).to eq record
79
- end
80
- end
81
-
82
- context 'when matches all attributes but at least one extra scopes' do
83
- before do
84
- described_class.create(
85
- author: author,
86
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_2' },
87
- metadata: {},
88
- resource: article,
89
- scopeable: category,
90
- value: 1
91
- )
92
- end
93
-
94
- it 'does not return the record' do
95
- result = described_class.rate_for(
96
- author: author,
97
- extra_scopes: { scope_1: 'scope_1', scope_2: 'scope_missing' },
98
- resource: article,
99
- scopeable: category
100
- )
101
-
102
- expect(result).to eq nil
103
- end
104
- end
105
- end
106
- end
107
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Rating::Rate do
6
- let!(:object) { build :rating_rate }
7
-
8
- it { expect(object).to be_valid }
9
-
10
- it { is_expected.to belong_to :author }
11
- it { is_expected.to belong_to :resource }
12
- it { is_expected.to belong_to :scopeable }
13
-
14
- it { is_expected.to validate_presence_of :author }
15
- it { is_expected.to validate_presence_of :resource }
16
- it { is_expected.to validate_presence_of :value }
17
-
18
- it do
19
- expect(subject).to validate_numericality_of(:value).is_less_than_or_equal_to(100).is_less_than_or_equal_to 100
20
- end
21
-
22
- it do
23
- scopes = %i[author_type resource_id resource_type scopeable_id scopeable_type]
24
- scopes += %i[scope_1 scope_2] if ENV['CONFIG_ENABLED_WITH_EXTRA_SCOPES'] == 'true'
25
-
26
- expect(object).to validate_uniqueness_of(:author_id).scoped_to(scopes).case_insensitive
27
- end
28
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
- require 'support/shared_context/with_database_records'
5
-
6
- RSpec.describe Rating::Rating, ':averager_data' do
7
- include_context 'with_database_records'
8
-
9
- context 'with no scopeable' do
10
- subject(:result) { described_class.averager_data article_1, nil }
11
-
12
- it 'returns the values average of given resource type' do
13
- expect(result.as_json['rating_avg'].to_f.to_s).to eq '30.5'
14
- end
15
-
16
- it 'returns the average of number of records for the given resource type' do
17
- expect(result.as_json['count_avg'].to_s).to eq '1.333333333333333333'
18
- end
19
- end
20
-
21
- context 'with scopeable' do
22
- subject(:result) { described_class.averager_data article_1, category }
23
-
24
- it 'returns the values average of given resource type' do
25
- expect(result.as_json['rating_avg'].to_f.to_s).to eq '1.5'
26
- end
27
-
28
- it 'returns the average of number of records for the given resource type' do
29
- expect(result.as_json['count_avg'].to_f.to_s).to eq '2.0'
30
- end
31
- end
32
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
- require 'support/shared_context/with_database_records'
5
-
6
- RSpec.describe Rating::Rating, ':data' do
7
- include_context 'with_database_records'
8
-
9
- context 'with no scopeable' do
10
- subject(:result) { described_class.data article_1, nil }
11
-
12
- it 'returns the average of value for a resource' do
13
- expect(result[:average]).to eq 50.5
14
- end
15
-
16
- it 'returns the sum of values for a resource' do
17
- expect(result[:sum]).to eq 101
18
- end
19
-
20
- it 'returns the count of votes for a resource' do
21
- expect(result[:total]).to eq 2
22
- end
23
-
24
- it 'returns the estimate for a resource' do
25
- expect(result[:estimate].to_s).to eq '42.5000000000000000012000000505'
26
- end
27
- end
28
-
29
- context 'with scopeable' do
30
- subject(:result) { described_class.data article_1, category }
31
-
32
- it 'returns the average of value for a resource' do
33
- expect(result[:average]).to eq 1.5
34
- end
35
-
36
- it 'returns the sum of values for a resource' do
37
- expect(result[:sum]).to eq 3
38
- end
39
-
40
- it 'returns the count of votes for a resource' do
41
- expect(result[:total]).to eq 2
42
- end
43
-
44
- it 'returns the estimate for a resource' do
45
- expect(result[:estimate]).to eq 1.5
46
- end
47
- end
48
- end