govuk_content_models 26.2.0 → 27.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +9 -0
- data/app/models/edition.rb +12 -2
- data/app/models/user.rb +1 -0
- data/lib/govuk_content_models/version.rb +1 -1
- data/test/models/edition_test.rb +43 -3
- data/test/models/user_test.rb +2 -2
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 27.0.0
|
2
|
+
|
3
|
+
- Corrected to return public timestamp of first edition when no major changes
|
4
|
+
- Adds a unique index on the `uid` field for a `User`. (breaking change)
|
5
|
+
|
6
|
+
## 26.3.0 (yanked)
|
7
|
+
- Corrected to return public timestamp of first edition when no major changes
|
8
|
+
- Yanked due to the unintended inclusion of a breaking change.
|
9
|
+
|
1
10
|
## 26.2.0
|
2
11
|
- Adds `reviewer` `String` field to `Edition` class.
|
3
12
|
|
data/app/models/edition.rb
CHANGED
@@ -42,6 +42,7 @@ class Edition
|
|
42
42
|
state_machine.states.map(&:name).each do |state|
|
43
43
|
scope state, where(state: state)
|
44
44
|
end
|
45
|
+
scope :archived_or_published, where(:state.in => ["archived", "published"])
|
45
46
|
scope :in_progress, where(:state.nin => ["archived", "published"])
|
46
47
|
scope :assigned_to, lambda { |user|
|
47
48
|
if user
|
@@ -66,6 +67,7 @@ class Edition
|
|
66
67
|
index "assigned_to_id"
|
67
68
|
index [["panopticon_id", Mongo::ASCENDING], ["version_number", Mongo::ASCENDING]], :unique => true
|
68
69
|
index "state"
|
70
|
+
index "updated_at"
|
69
71
|
|
70
72
|
class << self; attr_accessor :fields_to_clone end
|
71
73
|
@fields_to_clone = []
|
@@ -129,11 +131,19 @@ class Edition
|
|
129
131
|
def public_updated_at
|
130
132
|
if latest_major_update.present?
|
131
133
|
latest_major_update.updated_at
|
132
|
-
elsif
|
133
|
-
|
134
|
+
elsif has_ever_been_published?
|
135
|
+
first_edition_of_published.updated_at
|
134
136
|
end
|
135
137
|
end
|
136
138
|
|
139
|
+
def has_ever_been_published?
|
140
|
+
series.map(&:state).include?('published')
|
141
|
+
end
|
142
|
+
|
143
|
+
def first_edition_of_published
|
144
|
+
series.archived_or_published.order(version_number: "asc").first
|
145
|
+
end
|
146
|
+
|
137
147
|
def meta_data
|
138
148
|
PublicationMetadata.new self
|
139
149
|
end
|
data/app/models/user.rb
CHANGED
data/test/models/edition_test.rb
CHANGED
@@ -599,8 +599,8 @@ class EditionTest < ActiveSupport::TestCase
|
|
599
599
|
end
|
600
600
|
|
601
601
|
test "should be assigned to the last assigned recipient" do
|
602
|
-
alice =
|
603
|
-
bob =
|
602
|
+
alice = FactoryGirl.create(:user, name: "alice")
|
603
|
+
bob = FactoryGirl.create(:user, name: "bob")
|
604
604
|
edition = FactoryGirl.create(:guide_edition, panopticon_id: @artefact.id, state: "ready")
|
605
605
|
alice.assign(edition, bob)
|
606
606
|
assert_equal bob, edition.assigned_to
|
@@ -1132,11 +1132,17 @@ class EditionTest < ActiveSupport::TestCase
|
|
1132
1132
|
|
1133
1133
|
should 'return the timestamp of the first published edition when there are no major updates' do
|
1134
1134
|
edition1 = FactoryGirl.create(:answer_edition, major_change: false,
|
1135
|
-
updated_at:
|
1135
|
+
updated_at: 2.minute.ago,
|
1136
1136
|
state: 'published')
|
1137
1137
|
edition2 = edition1.build_clone
|
1138
|
+
Timecop.freeze(1.minute.ago) do
|
1139
|
+
#added to allow significant amount of time between edition updated_at values
|
1140
|
+
edition2.update_attributes!(state: 'published', major_change: false)
|
1141
|
+
end
|
1142
|
+
edition1.update_attributes!(state: 'archived', major_change: false)
|
1138
1143
|
|
1139
1144
|
assert_equal edition1.updated_at, edition2.public_updated_at
|
1145
|
+
assert_not_equal edition2.updated_at, edition2.public_updated_at
|
1140
1146
|
end
|
1141
1147
|
|
1142
1148
|
should 'return nil if there are no major updates and no published editions' do
|
@@ -1147,4 +1153,38 @@ class EditionTest < ActiveSupport::TestCase
|
|
1147
1153
|
assert_equal nil, edition1.public_updated_at
|
1148
1154
|
end
|
1149
1155
|
end
|
1156
|
+
|
1157
|
+
context '#has_ever_been_published?' do
|
1158
|
+
should 'return true if any edition has a published state' do
|
1159
|
+
edition1 = FactoryGirl.create(:answer_edition, major_change: false,
|
1160
|
+
updated_at: 2.minute.ago,
|
1161
|
+
state: 'published')
|
1162
|
+
edition2 = edition1.build_clone
|
1163
|
+
edition2.update_attributes!(state: 'archived', major_change: false)
|
1164
|
+
edition4 = FactoryGirl.create(:answer_edition, major_change: false,
|
1165
|
+
updated_at: 2.minute.ago,
|
1166
|
+
state: 'draft')
|
1167
|
+
|
1168
|
+
assert_equal true, edition1.has_ever_been_published?
|
1169
|
+
assert_equal true, edition2.has_ever_been_published?
|
1170
|
+
assert_equal false, edition4.has_ever_been_published?
|
1171
|
+
end
|
1172
|
+
end
|
1173
|
+
|
1174
|
+
context '#first_edition_of_published' do
|
1175
|
+
should 'return the first edition of a series that has at least one edition state published' do
|
1176
|
+
edition1 = FactoryGirl.create(:answer_edition, major_change: false,
|
1177
|
+
updated_at: 2.minute.ago,
|
1178
|
+
state: 'published')
|
1179
|
+
edition2 = edition1.build_clone
|
1180
|
+
edition1.update_attributes!(state: 'archived', major_change: false)
|
1181
|
+
edition2.update_attributes!(state: 'published', major_change: false)
|
1182
|
+
edition3 = edition2.build_clone
|
1183
|
+
edition3.update_attributes!(state: 'archived', major_change: false)
|
1184
|
+
|
1185
|
+
assert_equal edition1, edition1.first_edition_of_published
|
1186
|
+
assert_equal edition1, edition2.first_edition_of_published
|
1187
|
+
assert_equal edition1, edition3.first_edition_of_published
|
1188
|
+
end
|
1189
|
+
end
|
1150
1190
|
end
|
data/test/models/user_test.rb
CHANGED
@@ -112,8 +112,8 @@ class UserTest < ActiveSupport::TestCase
|
|
112
112
|
end
|
113
113
|
|
114
114
|
test "Edition becomes assigned to user when user is assigned an edition" do
|
115
|
-
boss_user =
|
116
|
-
worker_user =
|
115
|
+
boss_user = FactoryGirl.create(:user, :name => "Mat")
|
116
|
+
worker_user = FactoryGirl.create(:user, :name => "Grunt")
|
117
117
|
|
118
118
|
publication = boss_user.create_edition(:answer, title: "test answer", slug: "test", panopticon_id: @artefact.id)
|
119
119
|
boss_user.assign(publication, worker_user)
|
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: 27.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-12-
|
12
|
+
date: 2014-12-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bson_ext
|
@@ -475,7 +475,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
475
475
|
version: '0'
|
476
476
|
segments:
|
477
477
|
- 0
|
478
|
-
hash:
|
478
|
+
hash: 1210122604192578351
|
479
479
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
480
480
|
none: false
|
481
481
|
requirements:
|
@@ -484,7 +484,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
484
484
|
version: '0'
|
485
485
|
segments:
|
486
486
|
- 0
|
487
|
-
hash:
|
487
|
+
hash: 1210122604192578351
|
488
488
|
requirements: []
|
489
489
|
rubyforge_project:
|
490
490
|
rubygems_version: 1.8.23
|