govuk_content_models 29.1.2 → 30.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab1abf4484762f870e3d8e538b706e5cd426a66d
4
- data.tar.gz: b6545c3d24622aaf2b7d912bec0612063dc7efad
3
+ metadata.gz: ace1431a4755075f7fc7d6a9ec4ec9edf0db97cb
4
+ data.tar.gz: b4744764d54f9a8eff22384617d8c700b4e8caea
5
5
  SHA512:
6
- metadata.gz: 7e6a87f32f108d5ad7fde9fbcd35a962ff99f15cc93fddb9bc72fb02e8ef3b10f7a803eb6d30c2be0da930b434a125e6313188a13509fc43041a2de2ca965be1
7
- data.tar.gz: d264ff8d7bdca85773d58504fcd3e2e4dbafc09df865638bad3386e0715bea87e779ce8e227eca83c8b93443fd2f8d17262699afcc1ad2267b07ac8f9e237d87
6
+ metadata.gz: 1be2224113f915f7df753dd478728911cddd4439a008457b2d99d63da82d28999acae2e4420c6ceee4df3321cef3eb2dcafc29da8fd6887b45ab4c464c814b4a
7
+ data.tar.gz: a55c774b064aca486549a103d45111ac4a6d581148ec2c6ab30dc77f26129413c4d7b8b4fe7b0768eeac0557b765a2f8bce0a787afba817399edf363e36c2c88
data/CHANGELOG.md CHANGED
@@ -1,8 +1,22 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 30.0.0
4
+
5
+ - Add:
6
+ - `content_id` field to the `Artefact` model
7
+
8
+ - Remove:
9
+ - `specialist_body` field from `Artefact` model
10
+ - specialist documents from the list of formats owned by `specialist-publisher`
11
+ - model for rendering `specialist documents`
12
+ - `specialist document validator` from `slug validator`, its factory and its fixture
13
+
14
+ - Include question/answer texts in change notes for SimpleSmartAnswer editions
15
+ - Stop discarding some fields when creating a new edition (see: https://github.com/alphagov/govuk_content_models/commit/de295d09ea9bdc7397ee2ce1249d12b9cd1d9d66)
16
+
3
17
  ## 29.1.2
4
18
 
5
- - Bugfix: revert removal of specialist publisher code since it breaks Panopticon integration
19
+ - Bugfix: revert removal of specialist document code since it breaks Panopticon integration
6
20
 
7
21
  ## 29.1.1
8
22
 
@@ -11,6 +25,7 @@
11
25
  ## 29.1.0
12
26
 
13
27
  - Allow detailed guide slugs to start with /guidance
28
+ - Remove code relating to specialist documents
14
29
 
15
30
  ## 29.0.1
16
31
 
@@ -42,6 +57,7 @@
42
57
 
43
58
  - Change the scheduled publishing timestamp to be London local time
44
59
  instead of UTC.
60
+
45
61
  ## 28.7.0
46
62
 
47
63
  - Add `vehicle_recalls_and_faults_alert` artefact format
@@ -5,8 +5,6 @@ class AnswerEdition < Edition
5
5
 
6
6
  GOVSPEAK_FIELDS = [:body]
7
7
 
8
- @fields_to_clone = [:body]
9
-
10
8
  def whole_body
11
9
  self.body
12
10
  end
@@ -37,13 +37,18 @@ class Artefact
37
37
  field "publication_id", type: String
38
38
  field "description", type: String
39
39
  field "state", type: String, default: "draft"
40
- field "specialist_body", type: String
41
40
  field "language", type: String, default: "en"
42
41
  field "need_extended_font", type: Boolean, default: false
43
42
  field "latest_change_note", type: String
44
43
  field "public_timestamp", type: DateTime
45
44
  field "redirect_url", type: String
46
45
 
46
+ # content_id should be unique but we have existing artefacts without it.
47
+ # We should therefore enforce the uniqueness as soon as:
48
+ # - every current artefact will have a content id assigned
49
+ # - every future artefact will be created with a content id
50
+ field "content_id", type: String
51
+
47
52
  index "slug", :unique => true
48
53
 
49
54
  # This index allows the `relatable_artefacts` method to use an index-covered
@@ -75,17 +80,7 @@ class Artefact
75
80
  "smartanswers" => ["smart-answer"],
76
81
  "custom-application" => ["custom-application"], # In this case the owning_app is overriden. eg calendars, licencefinder
77
82
  "travel-advice-publisher" => ["travel-advice"],
78
- "specialist-publisher" => ["aaib_report",
79
- "cma_case",
80
- "countryside_stewardship_grant",
81
- "drug_safety_update",
82
- "european_structural_investment_fund",
83
- "international_development_fund",
84
- "maib_report",
85
- "manual",
86
- "medical_safety_alert",
87
- "raib_report",
88
- "vehicle_recalls_and_faults_alert"],
83
+ "specialist-publisher" => ["manual"],
89
84
  "finder-api" => ["finder",
90
85
  "finder_email_signup"],
91
86
  "whitehall" => ["announcement",
@@ -39,12 +39,6 @@ class BusinessSupportEdition < Edition
39
39
  # https://github.com/mongoid/mongoid/issues/1735 Really Mongoid‽
40
40
  validates :min_value, :max_value, :max_employees, :numericality => {:allow_nil => true, :only_integer => true}
41
41
 
42
- @fields_to_clone = [:body, :min_value, :max_value, :max_employees, :organiser,
43
- :eligibility, :evaluation, :additional_information, :continuation_link,
44
- :will_continue_on, :contact_details, :short_description, :priority, :areas,
45
- :business_sizes, :locations, :purposes, :sectors, :stages, :support_types,
46
- :start_date, :end_date]
47
-
48
42
  scope :for_facets, lambda { |facets|
49
43
  where({ "$and" => facets_criteria(facets) }).order_by([:priority, :desc], [:title, :asc])
50
44
  }
@@ -14,11 +14,6 @@ class CampaignEdition < Edition
14
14
 
15
15
  GOVSPEAK_FIELDS = [:body]
16
16
 
17
- @fields_to_clone = [
18
- :body, :large_image_id, :medium_image_id, :small_image_id,
19
- :organisation_formatted_name, :organisation_url, :organisation_brand_colour, :organisation_crest
20
- ]
21
-
22
17
  BRAND_COLOURS = [
23
18
  "attorney-generals-office",
24
19
  "cabinet-office",
@@ -7,10 +7,7 @@ class CompletedTransactionEdition < Edition
7
7
 
8
8
  GOVSPEAK_FIELDS = [:body]
9
9
 
10
- @fields_to_clone = [:body]
11
-
12
10
  def whole_body
13
11
  self.body
14
12
  end
15
-
16
13
  end
@@ -66,9 +66,6 @@ class Edition
66
66
  index "created_at"
67
67
  index "updated_at"
68
68
 
69
- class << self; attr_accessor :fields_to_clone end
70
- @fields_to_clone = []
71
-
72
69
  alias_method :admin_list_title, :title
73
70
 
74
71
  def series
@@ -173,24 +170,9 @@ class Edition
173
170
  # If the new clone is of the same type, we can copy all its fields over; if
174
171
  # we are changing the type of the edition, any fields other than the base
175
172
  # fields will likely be meaningless.
176
- def fields_to_copy(edition_class)
177
- edition_class == self.class ? self.class.fields_to_clone : []
178
- end
179
-
180
- def build_clone(edition_class=nil)
181
- unless state == "published"
182
- raise "Cloning of non published edition not allowed"
183
- end
184
- unless can_create_new_edition?
185
- raise "Cloning of a published edition when an in-progress edition exists
186
- is not allowed"
187
- end
188
-
189
- edition_class = self.class unless edition_class
190
- new_edition = edition_class.new(title: self.title,
191
- version_number: get_next_version_number)
192
-
193
- real_fields_to_merge = fields_to_copy(edition_class) + [
173
+ def fields_to_copy(target_class)
174
+ return_value = [
175
+ :title,
194
176
  :panopticon_id,
195
177
  :overview,
196
178
  :slug,
@@ -198,31 +180,45 @@ class Edition
198
180
  :primary_topic,
199
181
  :additional_topics
200
182
  ]
201
-
202
- real_fields_to_merge.each do |attr|
203
- new_edition[attr] = read_attribute(attr)
183
+ if target_class == self.class
184
+ type_specific_keys = self.fields.keys - Edition.fields.keys
185
+ return_value += type_specific_keys
204
186
  end
187
+ return_value
188
+ end
205
189
 
206
- if edition_class == AnswerEdition and %w(GuideEdition ProgrammeEdition TransactionEdition).include?(self.class.name)
207
- new_edition.body = whole_body
190
+ def build_clone(target_class=nil)
191
+ unless state == "published"
192
+ raise "Cloning of non published edition not allowed"
208
193
  end
209
-
210
- if edition_class == AnswerEdition and self.is_a?(LicenceEdition)
211
- new_edition.body = whole_body
212
- new_edition.overview = licence_overview
194
+ unless can_create_new_edition?
195
+ raise "Cloning of a published edition when an in-progress edition exists
196
+ is not allowed"
213
197
  end
214
198
 
215
- if edition_class == SimpleSmartAnswerEdition && %w(AnswerEdition GuideEdition ProgrammeEdition TransactionEdition).include?(self.class.name)
216
- new_edition.body = whole_body
217
- end
199
+ target_class = self.class unless target_class
200
+ new_edition = target_class.new(version_number: get_next_version_number)
218
201
 
219
- if edition_class == TransactionEdition and %w(AnswerEdition GuideEdition ProgrammeEdition).include?(self.class.name)
220
- new_edition.more_information = whole_body
202
+ fields_to_copy(target_class).each do |attr|
203
+ new_edition[attr] = read_attribute(attr)
221
204
  end
222
205
 
223
- if edition_class == GuideEdition and self.is_a?(AnswerEdition)
224
- new_edition.parts.build(title: "Part One", body: whole_body,
225
- slug: "part-one")
206
+ # If the type is changing, then take the combined body (whole_body) from
207
+ # the old and decide where to put it in the new.
208
+ #
209
+ # Where the type is not changing, the body will already have been copied
210
+ # above.
211
+ #
212
+ # We don't need to copy parts between Parted types here, because the Parted
213
+ # module does that.
214
+ if target_class != self.class
215
+ if new_edition.respond_to?(:parts) and !self.respond_to?(:parts)
216
+ new_edition.parts.build(title: "Part One", body: whole_body, slug: "part-one")
217
+ elsif new_edition.respond_to?(:more_information=)
218
+ new_edition.more_information = whole_body
219
+ elsif new_edition.respond_to?(:body=)
220
+ new_edition.body = whole_body
221
+ end
226
222
  end
227
223
 
228
224
  new_edition
@@ -8,7 +8,6 @@ class GuideEdition < Edition
8
8
  field :video_summary, type: String
9
9
 
10
10
  GOVSPEAK_FIELDS = []
11
- @fields_to_clone = [:video_url, :video_summary]
12
11
 
13
12
  def has_video?
14
13
  video_url.present?
@@ -5,8 +5,6 @@ class HelpPageEdition < Edition
5
5
 
6
6
  GOVSPEAK_FIELDS = [:body]
7
7
 
8
- @fields_to_clone = [:body]
9
-
10
8
  def whole_body
11
9
  self.body
12
10
  end
@@ -14,9 +14,6 @@ class LicenceEdition < Edition
14
14
  validate :licence_identifier_unique
15
15
  validates_format_of :continuation_link, :with => URI::regexp(%w(http https)), :allow_blank => true
16
16
 
17
- @fields_to_clone = [:licence_identifier, :licence_short_description,
18
- :licence_overview, :will_continue_on, :continuation_link]
19
-
20
17
  def whole_body
21
18
  [licence_short_description, licence_overview].join("\n\n")
22
19
  end
@@ -10,10 +10,6 @@ class LocalTransactionEdition < Edition
10
10
 
11
11
  GOVSPEAK_FIELDS = [:introduction, :more_information, :need_to_know]
12
12
 
13
- @fields_to_clone = [
14
- :lgsl_code, :introduction, :more_information, :need_to_know
15
- ]
16
-
17
13
  validate :valid_lgsl_code
18
14
 
19
15
  def valid_lgsl_code
data/app/models/parted.rb CHANGED
@@ -8,12 +8,12 @@ module Parted
8
8
  klass.after_validation :merge_embedded_parts_errors
9
9
  end
10
10
 
11
- def build_clone(edition_class=nil)
11
+ def build_clone(target_class=nil)
12
12
  new_edition = super
13
13
 
14
14
  # If the new edition is of the same type or another type that has parts,
15
15
  # copy over the parts from this edition
16
- if edition_class.nil? or edition_class.include? Parted
16
+ if target_class.nil? or target_class.include? Parted
17
17
  new_edition.parts = self.parts.map {|p| p.dup }
18
18
  end
19
19
 
@@ -8,8 +8,6 @@ class PlaceEdition < Edition
8
8
 
9
9
  GOVSPEAK_FIELDS = [:introduction, :more_information, :need_to_know]
10
10
 
11
- @fields_to_clone = [:introduction, :more_information, :place_type, :need_to_know]
12
-
13
11
  def whole_body
14
12
  self.introduction
15
13
  end
@@ -7,7 +7,6 @@ class ProgrammeEdition < Edition
7
7
  before_save :setup_default_parts, on: :create
8
8
 
9
9
  GOVSPEAK_FIELDS = []
10
- @fields_to_clone = []
11
10
 
12
11
  DEFAULT_PARTS = [
13
12
  {title: "Overview", slug: "overview"},
@@ -13,15 +13,16 @@ class SimpleSmartAnswerEdition < Edition
13
13
 
14
14
  GOVSPEAK_FIELDS = [:body]
15
15
 
16
- @fields_to_clone = [:body]
17
-
18
16
  def whole_body
19
- body
17
+ parts = [body]
18
+ unless nodes.nil?
19
+ parts += nodes.map { |node| "#{node.kind}: #{node.title} \n\n #{node.body}" }
20
+ end
21
+ parts.join("\n\n\n")
20
22
  end
21
23
 
22
- def build_clone(edition_class=nil)
23
- new_edition = super(edition_class)
24
- new_edition.body = self.body
24
+ def build_clone(target_class=nil)
25
+ new_edition = super(target_class)
25
26
 
26
27
  if new_edition.is_a?(SimpleSmartAnswerEdition)
27
28
  self.nodes.each {|n| new_edition.nodes << n.clone }
@@ -13,10 +13,6 @@ class TransactionEdition < Edition
13
13
 
14
14
  validates_format_of :department_analytics_profile, with: /UA-\d+-\d+/i, allow_blank: true
15
15
 
16
- @fields_to_clone = [:introduction, :will_continue_on, :link,
17
- :more_information, :alternate_methods,
18
- :need_to_know, :department_analytics_profile]
19
-
20
16
  def indexable_content
21
17
  "#{super} #{Govspeak::Document.new(introduction).to_text} #{Govspeak::Document.new(more_information).to_text}".strip
22
18
  end
@@ -10,8 +10,6 @@ class VideoEdition < Edition
10
10
 
11
11
  GOVSPEAK_FIELDS = [:body]
12
12
 
13
- @fields_to_clone = [:video_url, :video_summary, :body]
14
-
15
13
  attaches :caption_file
16
14
 
17
15
  def has_video?
@@ -8,7 +8,6 @@ class SlugValidator < ActiveModel::EachValidator
8
8
  FinderEmailSignupValidator,
9
9
  GovernmentPageValidator,
10
10
  ManualPageValidator,
11
- SpecialistDocumentPageValidator,
12
11
  BrowsePageValidator,
13
12
  DetailedGuideValidator,
14
13
  DefaultValidator
@@ -148,32 +147,6 @@ protected
148
147
  end
149
148
  end
150
149
 
151
- class SpecialistDocumentPageValidator < InstanceValidator
152
- def applicable?
153
- of_kind?(acceptable_formats)
154
- end
155
-
156
- def validate!
157
- unless url_parts.size == 2
158
- record.errors[attribute] << "must be of form <finder-slug>/<specialist-document-slug>"
159
- end
160
- unless url_parts.all? { |url_part| valid_slug?(url_part) }
161
- record.errors[attribute] << "must be usable in a URL"
162
- end
163
- end
164
-
165
- private
166
- def acceptable_formats
167
- Artefact::FORMATS_BY_DEFAULT_OWNING_APP["specialist-publisher"] - unacceptable_formats
168
- end
169
-
170
- def unacceptable_formats
171
- [
172
- "manual",
173
- ]
174
- end
175
- end
176
-
177
150
  class BrowsePageValidator < InstanceValidator
178
151
  def applicable?
179
152
  of_kind?('specialist_sector')
@@ -252,19 +252,6 @@ FactoryGirl.define do
252
252
  end
253
253
  end
254
254
 
255
- factory :rendered_specialist_document do
256
- sequence(:slug) {|n| "test-rendered-specialist-document-#{n}" }
257
- sequence(:title) {|n| "Test Rendered Specialist Document #{n}" }
258
- summary "My summary"
259
- body "<p>My body</p>"
260
- details({
261
- "opened_date" => "2013-04-20",
262
- "market_sector" => "some-market-sector",
263
- "case_type" => "a-case-type",
264
- "case_state" => "open",
265
- })
266
- end
267
-
268
255
  factory :rendered_manual do
269
256
  sequence(:slug) {|n| "test-rendered-manual-#{n}" }
270
257
  sequence(:title) {|n| "Test Rendered Manual #{n}" }
@@ -1,4 +1,4 @@
1
1
  module GovukContentModels
2
2
  # Changing this causes Jenkins to tag and release the gem into the wild
3
- VERSION = "29.1.2"
3
+ VERSION = "30.0.0"
4
4
  end
@@ -424,15 +424,6 @@ class ArtefactTest < ActiveSupport::TestCase
424
424
  assert artefact.any_editions_published?
425
425
  end
426
426
 
427
- test "should have a specialist_body field present for markdown content" do
428
- artefact = Artefact.create!(slug: "parent", name: "Harry Potter", kind: "guide", owning_app: "x")
429
- refute_includes artefact.attributes, "specialist_body"
430
-
431
- artefact.specialist_body = "Something wicked this way comes"
432
- assert_includes artefact.attributes, "specialist_body"
433
- assert_equal "Something wicked this way comes", artefact.specialist_body
434
- end
435
-
436
427
  test "should have 'video' as a supported FORMAT" do
437
428
  assert_includes Artefact::FORMATS, "video"
438
429
  end
@@ -235,7 +235,8 @@ class EditionTest < ActiveSupport::TestCase
235
235
  assert_equal 2, new_edition.version_number
236
236
  assert_equal @artefact.id.to_s, new_edition.panopticon_id
237
237
  assert_equal "draft", new_edition.state
238
- assert_equal "I am a test overview", new_edition.overview
238
+ assert_match /#{edition.licence_overview}/, new_edition.body
239
+ assert_match /#{edition.licence_short_description}/, new_edition.body
239
240
  assert_equal edition.whole_body, new_edition.body
240
241
  end
241
242
 
@@ -277,6 +278,24 @@ class EditionTest < ActiveSupport::TestCase
277
278
  assert_equal edition.whole_body, new_edition.whole_body
278
279
  end
279
280
 
281
+ test "Cloning from SimpleSmartAnswerEdition into AnswerEdition" do
282
+ edition = FactoryGirl.create(
283
+ :simple_smart_answer_edition,
284
+ state: "published",
285
+ panopticon_id: @artefact.id,
286
+ version_number: 1,
287
+ overview: "I am a test overview",
288
+ )
289
+ new_edition = edition.build_clone AnswerEdition
290
+
291
+ assert_equal AnswerEdition, new_edition.class
292
+ assert_equal 2, new_edition.version_number
293
+ assert_equal @artefact.id.to_s, new_edition.panopticon_id
294
+ assert_equal "draft", new_edition.state
295
+ assert_equal "I am a test overview", new_edition.overview
296
+ assert_equal edition.whole_body, new_edition.whole_body
297
+ end
298
+
280
299
  test "Cloning from AnswerEdition into TransactionEdition" do
281
300
  edition = FactoryGirl.create(
282
301
  :answer_edition,
@@ -56,7 +56,7 @@ class SimpleSmartAnswerEditionTest < ActiveSupport::TestCase
56
56
 
57
57
  new_edition = edition.build_clone(AnswerEdition)
58
58
 
59
- assert_equal edition.body, new_edition.body
59
+ assert_equal "This smart answer is somewhat unique and calls for a different kind of introduction\n\n\nquestion: You approach two open doors. Which do you choose? \n\n ", new_edition.body
60
60
 
61
61
  assert new_edition.is_a?(AnswerEdition)
62
62
  assert ! new_edition.respond_to?(:nodes)
@@ -76,16 +76,6 @@ class SlugTest < ActiveSupport::TestCase
76
76
  end
77
77
  end
78
78
 
79
- context "Specialist documents" do
80
- should "all url nested one level deep" do
81
- assert document_with_slug("some-finder/my-specialist-document", kind: "cma_case").valid?;
82
- end
83
-
84
- should "not allow deeper nesting" do
85
- refute document_with_slug("some-finder/my-specialist-document/not-allowed", kind: "cma_case").valid?
86
- end
87
- end
88
-
89
79
  context "Specialist sector browse pages" do
90
80
  should "allow a single path part" do
91
81
  assert document_with_slug("oil-and-gas", kind: "specialist_sector").valid?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_content_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 29.1.2
4
+ version: 30.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Battley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-04 00:00:00.000000000 Z
11
+ date: 2015-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bson_ext
@@ -310,7 +310,6 @@ files:
310
310
  - app/models/prerendered_entity.rb
311
311
  - app/models/programme_edition.rb
312
312
  - app/models/rendered_manual.rb
313
- - app/models/rendered_specialist_document.rb
314
313
  - app/models/simple_smart_answer_edition.rb
315
314
  - app/models/simple_smart_answer_edition/node.rb
316
315
  - app/models/simple_smart_answer_edition/node/option.rb
@@ -360,7 +359,6 @@ files:
360
359
  - lib/govuk_content_models/version.rb
361
360
  - lib/mongoid/monkey_patches.rb
362
361
  - test/fixtures/contactotron_api_response.json
363
- - test/fixtures/specialist_document_fixtures.rb
364
362
  - test/fixtures/uploads/image.jpg
365
363
  - test/models/action_test.rb
366
364
  - test/models/artefact_action_test.rb
@@ -390,7 +388,6 @@ files:
390
388
  - test/models/parted_test.rb
391
389
  - test/models/prerendered_entity_tests.rb
392
390
  - test/models/rendered_manual_test.rb
393
- - test/models/rendered_specialist_document_test.rb
394
391
  - test/models/simple_smart_answer_edition_test.rb
395
392
  - test/models/simple_smart_answer_node_test.rb
396
393
  - test/models/simple_smart_answer_option_test.rb
@@ -430,13 +427,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
430
427
  version: '0'
431
428
  requirements: []
432
429
  rubyforge_project:
433
- rubygems_version: 2.2.3
430
+ rubygems_version: 2.2.5
434
431
  signing_key:
435
432
  specification_version: 4
436
433
  summary: Shared models for Panopticon and Publisher, as a Rails Engine
437
434
  test_files:
438
435
  - test/fixtures/contactotron_api_response.json
439
- - test/fixtures/specialist_document_fixtures.rb
440
436
  - test/fixtures/uploads/image.jpg
441
437
  - test/models/action_test.rb
442
438
  - test/models/artefact_action_test.rb
@@ -466,7 +462,6 @@ test_files:
466
462
  - test/models/parted_test.rb
467
463
  - test/models/prerendered_entity_tests.rb
468
464
  - test/models/rendered_manual_test.rb
469
- - test/models/rendered_specialist_document_test.rb
470
465
  - test/models/simple_smart_answer_edition_test.rb
471
466
  - test/models/simple_smart_answer_node_test.rb
472
467
  - test/models/simple_smart_answer_option_test.rb
@@ -1,19 +0,0 @@
1
- require "prerendered_entity"
2
-
3
- class RenderedSpecialistDocument
4
- include Mongoid::Document
5
- include Mongoid::Timestamps
6
- extend PrerenderedEntity
7
-
8
- field :slug, type: String
9
- field :title, type: String
10
- field :summary, type: String
11
- field :body, type: String
12
- field :published_at, type: DateTime
13
-
14
- field :details, type: Hash
15
-
16
- index "slug", unique: true
17
-
18
- validates :slug, uniqueness: true
19
- end
@@ -1,16 +0,0 @@
1
- module SpecialistDocumentFixtures
2
- def basic_specialist_document_fields
3
- {
4
- slug: 'cma-cases/merger-investigation-2014',
5
- title: "Merger Investigation 2014",
6
- summary: "This is the summary of stuff going on in the Merger Investigation 2014",
7
- state: "published",
8
- body: "A body",
9
- opened_date: '2012-04-21',
10
- document_id: 'a-document-id',
11
- market_sector: 'oil-and-gas',
12
- case_type: 'some-case-type',
13
- case_state: 'open'
14
- }
15
- end
16
- end
@@ -1,12 +0,0 @@
1
- require "test_helper"
2
- require "fixtures/specialist_document_fixtures"
3
- require "models/prerendered_entity_tests"
4
-
5
- class RenderedSpecialistDocumentTest < ActiveSupport::TestCase
6
- include SpecialistDocumentFixtures
7
- include PrerenderedEntityTests
8
-
9
- def model_class
10
- RenderedSpecialistDocument
11
- end
12
- end