govuk_content_models 24.2.0 → 25.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +5 -0
- data/app/models/edition.rb +25 -4
- data/lib/govuk_content_models/version.rb +1 -1
- data/test/models/edition_test.rb +68 -21
- data/test/models/workflow_test.rb +6 -6
- metadata +4 -4
data/CHANGELOG.md
CHANGED
data/app/models/edition.rb
CHANGED
@@ -17,7 +17,6 @@ class Edition
|
|
17
17
|
field :created_at, type: DateTime, default: lambda { Time.zone.now }
|
18
18
|
field :publish_at, type: DateTime
|
19
19
|
field :overview, type: String
|
20
|
-
field :alternative_title, type: String
|
21
20
|
field :slug, type: String
|
22
21
|
field :department, type: String
|
23
22
|
field :rejected_count, type: Integer, default: 0
|
@@ -49,6 +48,7 @@ class Edition
|
|
49
48
|
where(:assigned_to_id.exists => false)
|
50
49
|
end
|
51
50
|
}
|
51
|
+
scope :major_updates, lambda { where(major_change: true) }
|
52
52
|
|
53
53
|
validates :title, presence: true
|
54
54
|
validates :version_number, presence: true, uniqueness: {scope: :panopticon_id}
|
@@ -110,6 +110,28 @@ class Edition
|
|
110
110
|
!scheduled_for_publishing? && subsequent_siblings.in_progress.empty?
|
111
111
|
end
|
112
112
|
|
113
|
+
def major_updates_in_series
|
114
|
+
history.published.major_updates
|
115
|
+
end
|
116
|
+
|
117
|
+
def latest_major_update
|
118
|
+
major_updates_in_series.first
|
119
|
+
end
|
120
|
+
|
121
|
+
def latest_change_note
|
122
|
+
if latest_major_update.present?
|
123
|
+
latest_major_update.change_note
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def public_updated_at
|
128
|
+
if latest_major_update.present?
|
129
|
+
latest_major_update.updated_at
|
130
|
+
elsif (first_published_edition = series.published.order(version_number: "asc").first)
|
131
|
+
first_published_edition.updated_at
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
113
135
|
def meta_data
|
114
136
|
PublicationMetadata.new self
|
115
137
|
end
|
@@ -125,9 +147,9 @@ class Edition
|
|
125
147
|
|
126
148
|
def indexable_content_without_parts
|
127
149
|
if respond_to?(:body)
|
128
|
-
"#{
|
150
|
+
"#{Govspeak::Document.new(body).to_text}".strip
|
129
151
|
else
|
130
|
-
|
152
|
+
""
|
131
153
|
end
|
132
154
|
end
|
133
155
|
|
@@ -162,7 +184,6 @@ class Edition
|
|
162
184
|
real_fields_to_merge = fields_to_copy(edition_class) + [
|
163
185
|
:panopticon_id,
|
164
186
|
:overview,
|
165
|
-
:alternative_title,
|
166
187
|
:slug,
|
167
188
|
:department,
|
168
189
|
:browse_pages,
|
data/test/models/edition_test.rb
CHANGED
@@ -137,12 +137,10 @@ class EditionTest < ActiveSupport::TestCase
|
|
137
137
|
panopticon_id: @artefact.id,
|
138
138
|
version_number: 1,
|
139
139
|
department: "Test dept",
|
140
|
-
overview: "I am a test overview"
|
141
|
-
alternative_title: "Alternative test title")
|
140
|
+
overview: "I am a test overview")
|
142
141
|
clone_edition = edition.build_clone
|
143
142
|
assert_equal clone_edition.department, "Test dept"
|
144
143
|
assert_equal clone_edition.overview, "I am a test overview"
|
145
|
-
assert_equal clone_edition.alternative_title, "Alternative test title"
|
146
144
|
assert_equal clone_edition.version_number, 2
|
147
145
|
end
|
148
146
|
|
@@ -194,7 +192,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
194
192
|
version_number: 1,
|
195
193
|
department: "Test dept",
|
196
194
|
overview: "I am a test overview",
|
197
|
-
alternative_title: "Alternative test title",
|
198
195
|
video_url: "http://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
199
196
|
)
|
200
197
|
new_edition = edition.build_clone AnswerEdition
|
@@ -205,7 +202,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
205
202
|
assert_equal new_edition.state, "draft"
|
206
203
|
assert_equal new_edition.department, "Test dept"
|
207
204
|
assert_equal new_edition.overview, "I am a test overview"
|
208
|
-
assert_equal new_edition.alternative_title, "Alternative test title"
|
209
205
|
assert_equal new_edition.whole_body, edition.whole_body
|
210
206
|
end
|
211
207
|
|
@@ -216,8 +212,7 @@ class EditionTest < ActiveSupport::TestCase
|
|
216
212
|
panopticon_id: @artefact.id,
|
217
213
|
version_number: 1,
|
218
214
|
department: "Test dept",
|
219
|
-
overview: "I am a test overview"
|
220
|
-
alternative_title: "Alternative test title"
|
215
|
+
overview: "I am a test overview"
|
221
216
|
)
|
222
217
|
new_edition = edition.build_clone AnswerEdition
|
223
218
|
|
@@ -227,7 +222,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
227
222
|
assert_equal new_edition.state, "draft"
|
228
223
|
assert_equal new_edition.department, "Test dept"
|
229
224
|
assert_equal new_edition.overview, "I am a test overview"
|
230
|
-
assert_equal new_edition.alternative_title, "Alternative test title"
|
231
225
|
assert_equal new_edition.whole_body, edition.whole_body
|
232
226
|
end
|
233
227
|
|
@@ -239,7 +233,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
239
233
|
version_number: 1,
|
240
234
|
department: "Test dept",
|
241
235
|
overview: "I am a test overview",
|
242
|
-
alternative_title: "Alternative test title",
|
243
236
|
more_information: "More information",
|
244
237
|
alternate_methods: "Alternate methods"
|
245
238
|
)
|
@@ -251,7 +244,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
251
244
|
assert_equal new_edition.state, "draft"
|
252
245
|
assert_equal new_edition.department, "Test dept"
|
253
246
|
assert_equal new_edition.overview, "I am a test overview"
|
254
|
-
assert_equal new_edition.alternative_title, "Alternative test title"
|
255
247
|
assert_equal new_edition.whole_body, edition.whole_body
|
256
248
|
end
|
257
249
|
|
@@ -263,7 +255,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
263
255
|
version_number: 1,
|
264
256
|
department: "Test dept",
|
265
257
|
overview: "I am a test overview",
|
266
|
-
alternative_title: "Alternative test title",
|
267
258
|
body: "Test body"
|
268
259
|
)
|
269
260
|
new_edition = edition.build_clone TransactionEdition
|
@@ -274,7 +265,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
274
265
|
assert_equal new_edition.state, "draft"
|
275
266
|
assert_equal new_edition.department, "Test dept"
|
276
267
|
assert_equal new_edition.overview, "I am a test overview"
|
277
|
-
assert_equal new_edition.alternative_title, "Alternative test title"
|
278
268
|
assert_equal new_edition.more_information, "Test body"
|
279
269
|
end
|
280
270
|
|
@@ -286,7 +276,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
286
276
|
version_number: 1,
|
287
277
|
department: "Test dept",
|
288
278
|
overview: "I am a test overview",
|
289
|
-
alternative_title: "Alternative test title",
|
290
279
|
video_url: "http://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
291
280
|
)
|
292
281
|
new_edition = edition.build_clone TransactionEdition
|
@@ -297,7 +286,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
297
286
|
assert_equal new_edition.state, "draft"
|
298
287
|
assert_equal new_edition.department, "Test dept"
|
299
288
|
assert_equal new_edition.overview, "I am a test overview"
|
300
|
-
assert_equal new_edition.alternative_title, "Alternative test title"
|
301
289
|
assert_equal new_edition.more_information, edition.whole_body
|
302
290
|
end
|
303
291
|
|
@@ -309,7 +297,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
309
297
|
version_number: 1,
|
310
298
|
department: "Test dept",
|
311
299
|
overview: "I am a test overview",
|
312
|
-
alternative_title: "Alternative test title"
|
313
300
|
)
|
314
301
|
new_edition = edition.build_clone TransactionEdition
|
315
302
|
|
@@ -319,7 +306,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
319
306
|
assert_equal new_edition.state, "draft"
|
320
307
|
assert_equal new_edition.department, "Test dept"
|
321
308
|
assert_equal new_edition.overview, "I am a test overview"
|
322
|
-
assert_equal new_edition.alternative_title, "Alternative test title"
|
323
309
|
assert_equal new_edition.more_information, edition.whole_body
|
324
310
|
end
|
325
311
|
|
@@ -331,7 +317,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
331
317
|
version_number: 1,
|
332
318
|
department: "Test dept",
|
333
319
|
overview: "I am a test overview",
|
334
|
-
alternative_title: "Alternative test title"
|
335
320
|
)
|
336
321
|
new_edition = edition.build_clone GuideEdition
|
337
322
|
|
@@ -341,7 +326,6 @@ class EditionTest < ActiveSupport::TestCase
|
|
341
326
|
assert_equal new_edition.state, "draft"
|
342
327
|
assert_equal new_edition.department, "Test dept"
|
343
328
|
assert_equal new_edition.overview, "I am a test overview"
|
344
|
-
assert_equal new_edition.alternative_title, "Alternative test title"
|
345
329
|
end
|
346
330
|
|
347
331
|
test "Cloning between types with parts" do
|
@@ -998,10 +982,10 @@ class EditionTest < ActiveSupport::TestCase
|
|
998
982
|
end
|
999
983
|
|
1000
984
|
context "for a single part thing" do
|
1001
|
-
should "have
|
1002
|
-
edition = FactoryGirl.create(:guide_edition, :state => 'ready', :title => 'one part thing',
|
985
|
+
should "have an empty string for an edition with no body" do
|
986
|
+
edition = FactoryGirl.create(:guide_edition, :state => 'ready', :title => 'one part thing', panopticon_id: FactoryGirl.create(:artefact).id)
|
1003
987
|
edition.publish
|
1004
|
-
assert_equal "
|
988
|
+
assert_equal "", edition.indexable_content
|
1005
989
|
end
|
1006
990
|
end
|
1007
991
|
|
@@ -1091,4 +1075,67 @@ class EditionTest < ActiveSupport::TestCase
|
|
1091
1075
|
assert_equal edition.browse_pages, new_edition.browse_pages
|
1092
1076
|
end
|
1093
1077
|
end
|
1078
|
+
|
1079
|
+
context "#latest_major_update" do
|
1080
|
+
should 'return the most recent published edition with a major change' do
|
1081
|
+
edition1 = FactoryGirl.create(:answer_edition, major_change: true,
|
1082
|
+
change_note: 'published',
|
1083
|
+
state: 'published',
|
1084
|
+
version_number: 1)
|
1085
|
+
edition2 = edition1.build_clone
|
1086
|
+
|
1087
|
+
edition2.update_attributes!(major_change: true, change_note: 'changed', state: 'published')
|
1088
|
+
edition1.update_attributes!(state: 'archived')
|
1089
|
+
|
1090
|
+
edition3 = edition2.build_clone
|
1091
|
+
|
1092
|
+
assert_equal edition2.id, edition3.latest_major_update.id
|
1093
|
+
end
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
context "#latest_change_note" do
|
1097
|
+
should 'return the change note of the latest major update' do
|
1098
|
+
edition1 = FactoryGirl.create(:answer_edition, major_change: true,
|
1099
|
+
change_note: 'a change note',
|
1100
|
+
state: 'published')
|
1101
|
+
edition2 = edition1.build_clone
|
1102
|
+
|
1103
|
+
assert_equal 'a change note', edition2.latest_change_note
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
should 'return nil if there is no major update in the edition series' do
|
1107
|
+
edition1 = FactoryGirl.create(:answer_edition, major_change: false,
|
1108
|
+
state: 'published')
|
1109
|
+
assert_equal nil, edition1.latest_change_note
|
1110
|
+
end
|
1111
|
+
end
|
1112
|
+
|
1113
|
+
context '#public_updated_at' do
|
1114
|
+
should 'return the updated_at timestamp of the latest major update' do
|
1115
|
+
edition1 = FactoryGirl.create(:answer_edition, major_change: true,
|
1116
|
+
change_note: 'a change note',
|
1117
|
+
updated_at: 1.minute.ago,
|
1118
|
+
state: 'published')
|
1119
|
+
edition2 = edition1.build_clone
|
1120
|
+
|
1121
|
+
assert_equal edition1.updated_at, edition2.public_updated_at
|
1122
|
+
end
|
1123
|
+
|
1124
|
+
should 'return the timestamp of the first published edition when there are no major updates' do
|
1125
|
+
edition1 = FactoryGirl.create(:answer_edition, major_change: false,
|
1126
|
+
updated_at: 1.minute.ago,
|
1127
|
+
state: 'published')
|
1128
|
+
edition2 = edition1.build_clone
|
1129
|
+
|
1130
|
+
assert_equal edition1.updated_at, edition2.public_updated_at
|
1131
|
+
end
|
1132
|
+
|
1133
|
+
should 'return nil if there are no major updates and no published editions' do
|
1134
|
+
edition1 = FactoryGirl.create(:answer_edition, major_change: false,
|
1135
|
+
updated_at: 1.minute.ago,
|
1136
|
+
state: 'draft')
|
1137
|
+
|
1138
|
+
assert_equal nil, edition1.public_updated_at
|
1139
|
+
end
|
1140
|
+
end
|
1094
1141
|
end
|
@@ -27,7 +27,7 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
27
27
|
user = User.create(name: "Ben")
|
28
28
|
other_user = User.create(name: "James")
|
29
29
|
|
30
|
-
guide = user.create_edition(:guide, panopticon_id: @artefact.id, overview: "My Overview", title: "My Title", slug: "my-title"
|
30
|
+
guide = user.create_edition(:guide, panopticon_id: @artefact.id, overview: "My Overview", title: "My Title", slug: "my-title")
|
31
31
|
edition = guide
|
32
32
|
|
33
33
|
request_review(user, edition)
|
@@ -141,7 +141,7 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
141
141
|
user = User.create(name: "Ben")
|
142
142
|
other_user = User.create(name: "James")
|
143
143
|
|
144
|
-
edition = user.create_edition(:guide, panopticon_id: @artefact.id, overview: "My Overview", title: "My Title", slug: "my-title"
|
144
|
+
edition = user.create_edition(:guide, panopticon_id: @artefact.id, overview: "My Overview", title: "My Title", slug: "my-title")
|
145
145
|
|
146
146
|
request_review(user, edition)
|
147
147
|
approve_review(other_user, edition)
|
@@ -158,7 +158,7 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
158
158
|
user = User.create(name: "Ben")
|
159
159
|
other_user = User.create(name: "James")
|
160
160
|
|
161
|
-
guide = user.create_edition(:guide, panopticon_id: FactoryGirl.create(:artefact).id, overview: "My Overview", title: "My Title", slug: "my-title"
|
161
|
+
guide = user.create_edition(:guide, panopticon_id: FactoryGirl.create(:artefact).id, overview: "My Overview", title: "My Title", slug: "my-title")
|
162
162
|
edition = guide
|
163
163
|
|
164
164
|
request_review(user, edition)
|
@@ -173,7 +173,7 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
173
173
|
user = User.create(name: "Ben")
|
174
174
|
other_user = User.create(name: "James")
|
175
175
|
|
176
|
-
guide = user.create_edition(:guide, panopticon_id: FactoryGirl.create(:artefact).id, overview: "My Overview", title: "My Title", slug: "my-title"
|
176
|
+
guide = user.create_edition(:guide, panopticon_id: FactoryGirl.create(:artefact).id, overview: "My Overview", title: "My Title", slug: "my-title")
|
177
177
|
edition = guide
|
178
178
|
|
179
179
|
request_review(user, edition)
|
@@ -189,7 +189,7 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
189
189
|
user = User.create(name: "Ben")
|
190
190
|
other_user = User.create(name: "James")
|
191
191
|
|
192
|
-
guide = user.create_edition(:guide, panopticon_id: FactoryGirl.create(:artefact).id, overview: "My Overview", title: "My Title", slug: "my-title"
|
192
|
+
guide = user.create_edition(:guide, panopticon_id: FactoryGirl.create(:artefact).id, overview: "My Overview", title: "My Title", slug: "my-title")
|
193
193
|
edition = guide
|
194
194
|
|
195
195
|
request_review(user, edition)
|
@@ -206,7 +206,7 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
206
206
|
other_user = User.create(name: "James")
|
207
207
|
another_user = User.create(name: "Fiona")
|
208
208
|
|
209
|
-
guide = user.create_edition(:guide, panopticon_id: FactoryGirl.create(:artefact).id, overview: "My Overview", title: "My Title", slug: "my-title"
|
209
|
+
guide = user.create_edition(:guide, panopticon_id: FactoryGirl.create(:artefact).id, overview: "My Overview", title: "My Title", slug: "my-title")
|
210
210
|
edition = guide
|
211
211
|
|
212
212
|
request_review(user, edition)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_content_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 25.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-11-
|
12
|
+
date: 2014-11-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bson_ext
|
@@ -476,7 +476,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
476
476
|
version: '0'
|
477
477
|
segments:
|
478
478
|
- 0
|
479
|
-
hash:
|
479
|
+
hash: -823528571067115172
|
480
480
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
481
481
|
none: false
|
482
482
|
requirements:
|
@@ -485,7 +485,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
485
485
|
version: '0'
|
486
486
|
segments:
|
487
487
|
- 0
|
488
|
-
hash:
|
488
|
+
hash: -823528571067115172
|
489
489
|
requirements: []
|
490
490
|
rubyforge_project:
|
491
491
|
rubygems_version: 1.8.23
|