govuk_content_models 6.0.2

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.
Files changed (104) hide show
  1. data/.gitignore +17 -0
  2. data/.ruby-version +1 -0
  3. data/.travis.yml +14 -0
  4. data/CONTRIBUTING.md +22 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +20 -0
  7. data/README.md +5 -0
  8. data/Rakefile +46 -0
  9. data/app/models/action.rb +60 -0
  10. data/app/models/answer_edition.rb +13 -0
  11. data/app/models/artefact.rb +341 -0
  12. data/app/models/artefact_action.rb +27 -0
  13. data/app/models/artefact_external_link.rb +15 -0
  14. data/app/models/business_support/business_size.rb +14 -0
  15. data/app/models/business_support/business_type.rb +14 -0
  16. data/app/models/business_support/location.rb +14 -0
  17. data/app/models/business_support/purpose.rb +14 -0
  18. data/app/models/business_support/sector.rb +14 -0
  19. data/app/models/business_support/stage.rb +14 -0
  20. data/app/models/business_support/support_type.rb +14 -0
  21. data/app/models/business_support_edition.rb +69 -0
  22. data/app/models/campaign_edition.rb +72 -0
  23. data/app/models/completed_transaction_edition.rb +14 -0
  24. data/app/models/curated_list.rb +32 -0
  25. data/app/models/edition.rb +286 -0
  26. data/app/models/expectant.rb +21 -0
  27. data/app/models/expectation.rb +12 -0
  28. data/app/models/guide_edition.rb +19 -0
  29. data/app/models/help_page_edition.rb +13 -0
  30. data/app/models/licence_edition.rb +35 -0
  31. data/app/models/local_authority.rb +58 -0
  32. data/app/models/local_interaction.rb +20 -0
  33. data/app/models/local_service.rb +49 -0
  34. data/app/models/local_transaction_edition.rb +49 -0
  35. data/app/models/overview_dashboard.rb +25 -0
  36. data/app/models/part.rb +28 -0
  37. data/app/models/parted.rb +32 -0
  38. data/app/models/place_edition.rb +20 -0
  39. data/app/models/programme_edition.rb +26 -0
  40. data/app/models/simple_smart_answer_edition.rb +66 -0
  41. data/app/models/simple_smart_answer_edition/node.rb +40 -0
  42. data/app/models/simple_smart_answer_edition/node/option.rb +31 -0
  43. data/app/models/tag.rb +88 -0
  44. data/app/models/transaction_edition.rb +28 -0
  45. data/app/models/travel_advice_edition.rb +177 -0
  46. data/app/models/user.rb +54 -0
  47. data/app/models/video_edition.rb +24 -0
  48. data/app/models/workflow.rb +217 -0
  49. data/app/models/workflow_actor.rb +141 -0
  50. data/app/traits/attachable.rb +60 -0
  51. data/app/traits/govspeak_smart_quotes_fixer.rb +19 -0
  52. data/app/traits/taggable.rb +113 -0
  53. data/app/validators/safe_html.rb +33 -0
  54. data/app/validators/slug_validator.rb +53 -0
  55. data/config/mongoid.yml +5 -0
  56. data/govuk_content_models.gemspec +42 -0
  57. data/jenkins.sh +7 -0
  58. data/lib/fact_check_address.rb +36 -0
  59. data/lib/govuk_content_models.rb +12 -0
  60. data/lib/govuk_content_models/require_all.rb +14 -0
  61. data/lib/govuk_content_models/test_helpers/factories.rb +213 -0
  62. data/lib/govuk_content_models/test_helpers/local_services.rb +24 -0
  63. data/lib/govuk_content_models/version.rb +4 -0
  64. data/test/fixtures/contactotron_api_response.json +1 -0
  65. data/test/fixtures/uploads/image.jpg +0 -0
  66. data/test/models/artefact_action_test.rb +123 -0
  67. data/test/models/artefact_external_link_test.rb +32 -0
  68. data/test/models/artefact_tag_test.rb +52 -0
  69. data/test/models/artefact_test.rb +583 -0
  70. data/test/models/business_support/business_size_test.rb +25 -0
  71. data/test/models/business_support/business_type_test.rb +25 -0
  72. data/test/models/business_support/location_test.rb +25 -0
  73. data/test/models/business_support/purpose_test.rb +29 -0
  74. data/test/models/business_support/sector_test.rb +25 -0
  75. data/test/models/business_support/stage_test.rb +25 -0
  76. data/test/models/business_support/support_type_test.rb +25 -0
  77. data/test/models/business_support_edition_test.rb +186 -0
  78. data/test/models/campaign_edition_test.rb +90 -0
  79. data/test/models/curated_list_test.rb +32 -0
  80. data/test/models/edition_test.rb +826 -0
  81. data/test/models/fact_check_address_test.rb +36 -0
  82. data/test/models/help_page_edition_test.rb +38 -0
  83. data/test/models/licence_edition_test.rb +104 -0
  84. data/test/models/local_authority_test.rb +113 -0
  85. data/test/models/local_service_test.rb +199 -0
  86. data/test/models/local_transaction_edition_test.rb +78 -0
  87. data/test/models/overview_dashboard_test.rb +47 -0
  88. data/test/models/simple_smart_answer_edition_test.rb +169 -0
  89. data/test/models/simple_smart_answer_node_test.rb +134 -0
  90. data/test/models/simple_smart_answer_option_test.rb +90 -0
  91. data/test/models/tag_test.rb +92 -0
  92. data/test/models/time_zone_test.rb +48 -0
  93. data/test/models/transaction_edition_test.rb +20 -0
  94. data/test/models/travel_advice_edition_test.rb +480 -0
  95. data/test/models/user_test.rb +114 -0
  96. data/test/models/video_edition_test.rb +64 -0
  97. data/test/models/workflow_actor_test.rb +61 -0
  98. data/test/models/workflow_test.rb +307 -0
  99. data/test/test_helper.rb +47 -0
  100. data/test/traits/attachable_test.rb +143 -0
  101. data/test/traits/taggable_test.rb +114 -0
  102. data/test/validators/safe_html_validator_test.rb +86 -0
  103. data/test/validators/slug_validator_test.rb +42 -0
  104. metadata +511 -0
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class BusinessSupport::BusinessSizeTest < ActiveSupport::TestCase
4
+ setup do
5
+ @charity = BusinessSupport::BusinessSize.create(name: "Under 10", slug: "under-10")
6
+ end
7
+
8
+ test "should validate presence of name" do
9
+ refute BusinessSupport::BusinessSize.new(slug: "under-10").valid?
10
+ end
11
+
12
+ test "should validate uniqueness of name" do
13
+ another_type = BusinessSupport::BusinessSize.new(name: "Under 10", slug: "under-10")
14
+ refute another_type.valid?, "should validate uniqueness of name."
15
+ end
16
+
17
+ test "should validate presence of slug" do
18
+ refute BusinessSupport::BusinessSize.new(name: "Under 10").valid?
19
+ end
20
+
21
+ test "should validate uniqueness of slug" do
22
+ another_type = BusinessSupport::BusinessSize.new(name: "Under 10", slug: "under-10")
23
+ refute another_type.valid?, "should validate uniqueness of slug."
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class BusinessSupport::BusinessTypeTest < ActiveSupport::TestCase
4
+ setup do
5
+ @charity = BusinessSupport::BusinessType.create(name: "Charity", slug: "charity")
6
+ end
7
+
8
+ test "should validate presence of name" do
9
+ refute BusinessSupport::BusinessType.new(slug: "charity").valid?
10
+ end
11
+
12
+ test "should validate uniqueness of name" do
13
+ another_type = BusinessSupport::BusinessType.new(name: "Charity", slug: "charity")
14
+ refute another_type.valid?, "should validate uniqueness of name."
15
+ end
16
+
17
+ test "should validate presence of slug" do
18
+ refute BusinessSupport::BusinessType.new(name: "Charity").valid?
19
+ end
20
+
21
+ test "should validate uniqueness of slug" do
22
+ another_type = BusinessSupport::BusinessType.new(name: "Charity", slug: "charity")
23
+ refute another_type.valid?, "should validate uniqueness of slug."
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class BusinessSupport::LocationTest < ActiveSupport::TestCase
4
+ setup do
5
+ @region = BusinessSupport::Location.create(name: "Ecclefechan", slug: "ecclefechan")
6
+ end
7
+
8
+ test "should validates presence of name" do
9
+ refute BusinessSupport::Location.new(slug: "ecclefechan").valid?
10
+ end
11
+
12
+ test "should validate uniqueness of name" do
13
+ another_scheme = BusinessSupport::Location.new(name: "Ecclefechan", slug: "ecclefechan")
14
+ refute another_scheme.valid?, "should validate uniqueness of name."
15
+ end
16
+
17
+ test "should validate presence of slug" do
18
+ refute BusinessSupport::Location.new(name: "Ecclefechan").valid?
19
+ end
20
+
21
+ test "should validate uniqueness of slug" do
22
+ another_scheme = BusinessSupport::Location.new(name: "Ecclefechan", slug: "ecclefechan")
23
+ refute another_scheme.valid?, "should validate uniqueness of slug"
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class BusinessSupport::PurposeTest < ActiveSupport::TestCase
4
+ setup do
5
+ @purpose = BusinessSupport::Purpose.create(name: "Setting up your business",
6
+ slug: "setting-up-your-business")
7
+ end
8
+
9
+ test "should validates presence of name" do
10
+ refute BusinessSupport::Purpose.new(slug: "setting-up-your-business").valid?
11
+ end
12
+
13
+ test "should validate uniqueness of name" do
14
+ another_purpose = BusinessSupport::Purpose.new(name: "Setting up your business",
15
+ slug: "setting-up-your-business")
16
+ refute another_purpose.valid?, "should validate uniqueness of name."
17
+ end
18
+
19
+ test "should validates presence of slug" do
20
+ refute BusinessSupport::Purpose.new(name: "Setting up your business").valid?
21
+ end
22
+
23
+ test "should validate uniqueness of slug" do
24
+ another_scheme = BusinessSupport::Purpose.new(name: "Setting up your business",
25
+ slug: "setting-up-your-business")
26
+ refute another_scheme.valid?, "should validate uniqueness of name."
27
+ end
28
+
29
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class BusinessSupport::SectorTest < ActiveSupport::TestCase
4
+ setup do
5
+ @sector = BusinessSupport::Sector.create(name: "Manufacturing", slug: "manufacturing")
6
+ end
7
+
8
+ test "should validates presence of name" do
9
+ refute BusinessSupport::Sector.new(slug: "manufacturing").valid?
10
+ end
11
+
12
+ test "should validate uniqueness of name" do
13
+ another_scheme = BusinessSupport::Sector.new(name: "Manufacturing", slug: "manufacturing")
14
+ refute another_scheme.valid?, "should validate uniqueness of name."
15
+ end
16
+
17
+ test "should validates presence of slug" do
18
+ refute BusinessSupport::Sector.new(name: "Manufacturing").valid?
19
+ end
20
+
21
+ test "should validate uniqueness of slug" do
22
+ another_scheme = BusinessSupport::Sector.new(name: "Manufacturing", slug: "manufacturing")
23
+ refute another_scheme.valid?, "should validate uniqueness of name."
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class BusinessSupport::StageTest < ActiveSupport::TestCase
4
+ setup do
5
+ @stage = BusinessSupport::Stage.create(name: "Finance", slug: "finance")
6
+ end
7
+
8
+ test "should validates presence of name" do
9
+ refute BusinessSupport::Stage.new(slug: "finance").valid?
10
+ end
11
+
12
+ test "should validate uniqueness of name" do
13
+ another_scheme = BusinessSupport::Stage.new(name: "Finance", slug: "finance")
14
+ refute another_scheme.valid?, "should validate uniqueness of name."
15
+ end
16
+
17
+ test "should validates presence of slug" do
18
+ refute BusinessSupport::Stage.new(name: "Finance").valid?
19
+ end
20
+
21
+ test "should validate uniqueness of slug" do
22
+ another_scheme = BusinessSupport::Stage.new(name: "Finance", slug: "finance")
23
+ refute another_scheme.valid?, "should validate uniqueness of name."
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class BusinessSupport::SupportTypeTest < ActiveSupport::TestCase
4
+ setup do
5
+ @type = BusinessSupport::SupportType.create(name: "Loan", slug: "loan")
6
+ end
7
+
8
+ test "should validates presence of name" do
9
+ refute BusinessSupport::SupportType.new(slug: "short-term-loan").valid?
10
+ end
11
+
12
+ test "should validate uniqueness of name" do
13
+ another_scheme = BusinessSupport::SupportType.new(name: "Loan", slug: "short-term-loan")
14
+ refute another_scheme.valid?, "should validate uniqueness of name."
15
+ end
16
+
17
+ test "should validates presence of slug" do
18
+ refute BusinessSupport::SupportType.new(name: "Loan").valid?
19
+ end
20
+
21
+ test "should validate uniqueness of slug" do
22
+ another_scheme = BusinessSupport::SupportType.new(name: "Loan", slug: "loan")
23
+ refute another_scheme.valid?, "should validate uniqueness of name."
24
+ end
25
+ end
@@ -0,0 +1,186 @@
1
+ # encoding: utf-8
2
+ require_relative "../test_helper"
3
+
4
+ class BusinessSupportEditionTest < ActiveSupport::TestCase
5
+ def setup
6
+ @artefact = FactoryGirl.create(:artefact)
7
+ end
8
+
9
+ should "have custom fields" do
10
+ support = FactoryGirl.create(:business_support_edition, panopticon_id: @artefact.id)
11
+ support.short_description = "The short description"
12
+ support.body = "The body"
13
+ support.eligibility = "The eligibility"
14
+ support.evaluation = "The evaluation"
15
+ support.additional_information = "The additional information"
16
+ support.min_value = 1000
17
+ support.max_value = 3000
18
+ support.max_employees = 2000
19
+ support.organiser = "The business support people"
20
+ support.continuation_link = "http://www.gov.uk"
21
+ support.will_continue_on = "The GOVUK website"
22
+ support.contact_details = "123 The Street, Townsville, UK. 07324 123456"
23
+ support.business_support_identifier = "123-4-5"
24
+
25
+ support.priority = 2
26
+ support.business_sizes << "up-to-249"
27
+ support.business_types << "charity"
28
+ support.locations = ["scotland", "england"]
29
+ support.purposes << "making-the-most-of-the-internet"
30
+ support.sectors = ["education", "manufacturing"]
31
+ support.stages << "start-up"
32
+ support.support_types = ["grant", "loan"]
33
+ support.start_date = Date.parse("1 Jan 2000")
34
+ support.end_date = Date.parse("1 Jan 2020")
35
+
36
+ support.safely.save!
37
+
38
+ support = BusinessSupportEdition.first
39
+ assert_equal "The short description", support.short_description
40
+ assert_equal "The body", support.body
41
+ assert_equal "The eligibility", support.eligibility
42
+ assert_equal "The evaluation", support.evaluation
43
+ assert_equal "The additional information", support.additional_information
44
+ assert_equal 1000, support.min_value
45
+ assert_equal 3000, support.max_value
46
+ assert_equal 2000, support.max_employees
47
+ assert_equal "The business support people", support.organiser
48
+ assert_equal "http://www.gov.uk", support.continuation_link
49
+ assert_equal "The GOVUK website", support.will_continue_on
50
+ assert_equal "123 The Street, Townsville, UK. 07324 123456", support.contact_details
51
+ assert_equal "123-4-5", support.business_support_identifier
52
+
53
+ assert_equal 2, support.priority
54
+ assert_equal ["up-to-249"], support.business_sizes
55
+ assert_equal ["charity"], support.business_types
56
+ assert_equal ["scotland", "england"], support.locations
57
+ assert_equal ["making-the-most-of-the-internet"], support.purposes
58
+ assert_equal ["education", "manufacturing"], support.sectors
59
+ assert_equal ["start-up"], support.stages
60
+ assert_equal ["grant", "loan"], support.support_types
61
+ assert_equal Date.parse("1 Jan 2000"), support.start_date
62
+ assert_equal Date.parse("1 Jan 2020"), support.end_date
63
+ end
64
+
65
+ should "not allow max_value to be less than min_value" do
66
+ support = FactoryGirl.create(:business_support_edition, panopticon_id: @artefact.id)
67
+ support.min_value = 100
68
+ support.max_value = 50
69
+
70
+ refute support.valid?
71
+ end
72
+
73
+ should "require a business_support_identifier" do
74
+ support = FactoryGirl.build(:business_support_edition, :business_support_identifier => '')
75
+ assert ! support.valid?, "expected business support edition not to be valid"
76
+ end
77
+
78
+ context "business support identifier uniqueness" do
79
+ setup do
80
+ @support = FactoryGirl.build(:business_support_edition, panopticon_id: @artefact.id)
81
+ @another_artefact = FactoryGirl.create(:artefact)
82
+ end
83
+ should "have a unique business support identifier" do
84
+ another_support = FactoryGirl.create(:business_support_edition, panopticon_id: @another_artefact.id,
85
+ :business_support_identifier => "this-should-be-unique")
86
+ @support.business_support_identifier = "this-should-be-unique"
87
+ assert !@support.valid?, "business_support_identifier should be unique"
88
+ @support.business_support_identifier = "this-is-different"
89
+ assert @support.valid?, "business_support_identifier should be unique"
90
+ end
91
+
92
+ should "not consider archived editions when evaluating uniqueness" do
93
+ another_support = FactoryGirl.create(:business_support_edition, panopticon_id: @another_artefact.id,
94
+ :business_support_identifier => "this-should-be-unique", :state => "archived")
95
+ @support.business_support_identifier = "this-should-be-unique"
96
+ assert @support.valid?, "business_support should be valid"
97
+ end
98
+ end
99
+
100
+ context "numeric field validations" do
101
+ # https://github.com/mongoid/mongoid/issues/1735 Really Mongoid‽
102
+ [
103
+ :min_value,
104
+ :max_value,
105
+ :max_employees,
106
+ ].each do |field|
107
+ should "require an integer #{field}" do
108
+ @support = FactoryGirl.build(:business_support_edition)
109
+ [
110
+ 'sadfsadf',
111
+ '100,000',
112
+ 1.23,
113
+ ].each do |value|
114
+ @support.send("#{field}=", value)
115
+ refute @support.valid?
116
+ assert_equal 1, @support.errors[field].count
117
+ end
118
+
119
+ @support.send("#{field}=", "100")
120
+ @support.save!
121
+ s = BusinessSupportEdition.find(@support.id)
122
+ assert_equal 100, s.send(field)
123
+
124
+ @support.send("#{field}=", "")
125
+ @support.save!
126
+ s = BusinessSupportEdition.find(@support.id)
127
+ assert_equal nil, s.send(field)
128
+ end
129
+ end
130
+ end
131
+
132
+ context "continuation_link validation" do
133
+
134
+ setup do
135
+ @bs = FactoryGirl.create(:business_support_edition, panopticon_id: @artefact.id)
136
+ end
137
+
138
+ should "not validate the continuation link when blank" do
139
+ @bs.continuation_link = ""
140
+ assert @bs.valid?, "continuation link validation should not be triggered when the field is blank"
141
+ end
142
+ should "fail validation when the continuation link has an invalid url" do
143
+ @bs.continuation_link = "not&a+valid_url"
144
+ assert !@bs.valid?, "continuation link validation should fail with a invalid url"
145
+ end
146
+ should "pass validation with a valid continuation link url" do
147
+ @bs.continuation_link = "http://www.hmrc.gov.uk"
148
+ assert @bs.valid?, "continuation_link validation should pass with a valid url"
149
+ end
150
+
151
+ end
152
+
153
+ should "clone extra fields when cloning edition" do
154
+ support = FactoryGirl.create(:business_support_edition,
155
+ :panopticon_id => @artefact.id,
156
+ :state => "published",
157
+ :business_support_identifier => "1234",
158
+ :short_description => "Short description of support format",
159
+ :body => "Body to be cloned",
160
+ :min_value => 1,
161
+ :max_value => 2,
162
+ :max_employees => 3,
163
+ :organiser => "Organiser to be cloned",
164
+ :eligibility => "Eligibility to be cloned",
165
+ :evaluation => "Evaluation to be cloned",
166
+ :additional_information => "Additional info to be cloned",
167
+ :will_continue_on => "Continuation text to be cloned",
168
+ :continuation_link => "http://www.gov.uk",
169
+ :contact_details => "Contact details to be cloned")
170
+ new_support = support.build_clone
171
+
172
+ assert_equal support.business_support_identifier, new_support.business_support_identifier
173
+ assert_equal support.short_description, new_support.short_description
174
+ assert_equal support.body, new_support.body
175
+ assert_equal support.min_value, new_support.min_value
176
+ assert_equal support.max_value, new_support.max_value
177
+ assert_equal support.max_employees, new_support.max_employees
178
+ assert_equal support.organiser, new_support.organiser
179
+ assert_equal support.eligibility, new_support.eligibility
180
+ assert_equal support.evaluation, new_support.evaluation
181
+ assert_equal support.additional_information, new_support.additional_information
182
+ assert_equal support.will_continue_on, new_support.will_continue_on
183
+ assert_equal support.continuation_link, new_support.continuation_link
184
+ assert_equal support.contact_details, new_support.contact_details
185
+ end
186
+ end
@@ -0,0 +1,90 @@
1
+ require "test_helper"
2
+
3
+ class CampaignEditionTest < ActiveSupport::TestCase
4
+ setup do
5
+ @artefact = FactoryGirl.create(:artefact, :kind => 'campaign', :slug => "start-all-the-campaigns")
6
+ end
7
+
8
+ should "have correct extra fields" do
9
+ c = FactoryGirl.build(:campaign_edition, :panopticon_id => @artefact.id)
10
+ c.body = "Start all the campaigns!"
11
+ c.large_image_id = "large-image-id-from-the-asset-manager"
12
+ c.medium_image_id = "medium-image-id-from-the-asset-manager"
13
+ c.small_image_id = "small-image-id-from-the-asset-manager"
14
+ c.organisation_formatted_name = "Driver & Vehicle\nLicensing\nAgency"
15
+ c.organisation_url = "/government/organisations/driver-and-vehicle-licensing-agency"
16
+ c.organisation_brand_colour = "department-for-transport"
17
+ c.organisation_crest = "single-identity"
18
+ c.safely.save!
19
+
20
+ c = CampaignEdition.first
21
+ assert_equal "Start all the campaigns!", c.body
22
+ assert_equal "large-image-id-from-the-asset-manager", c.large_image_id
23
+ assert_equal "medium-image-id-from-the-asset-manager", c.medium_image_id
24
+ assert_equal "small-image-id-from-the-asset-manager", c.small_image_id
25
+ assert_equal "Driver & Vehicle\nLicensing\nAgency", c.organisation_formatted_name
26
+ assert_equal "/government/organisations/driver-and-vehicle-licensing-agency", c.organisation_url
27
+ assert_equal "department-for-transport", c.organisation_brand_colour
28
+ assert_equal "single-identity", c.organisation_crest
29
+ end
30
+
31
+ should "give a friendly (legacy supporting) description of its format" do
32
+ campaign = CampaignEdition.new
33
+ assert_equal "Campaign", campaign.format
34
+ end
35
+
36
+ should "return the body as whole_body" do
37
+ campaign = FactoryGirl.build(:campaign_edition,
38
+ :panopticon_id => @artefact.id,
39
+ :body => "Something")
40
+ assert_equal campaign.body, campaign.whole_body
41
+ end
42
+
43
+ should "clone extra fields when cloning edition" do
44
+ campaign = FactoryGirl.create(:campaign_edition,
45
+ :panopticon_id => @artefact.id,
46
+ :state => "published",
47
+ :body => "I'm very campaignful",
48
+ :large_image_id => "large-image",
49
+ :medium_image_id => "medium-image",
50
+ :small_image_id => "small-image",
51
+ :organisation_formatted_name => "Driver & Vehicle\nLicensing\nAgency",
52
+ :organisation_url => "/government/organisations/driver-and-vehicle-licensing-agency",
53
+ :organisation_brand_colour => "department-for-transport",
54
+ :organisation_crest => "single-identity" )
55
+
56
+ new_campaign = campaign.build_clone
57
+ assert_equal campaign.body, new_campaign.body
58
+ assert_equal campaign.large_image_id, new_campaign.large_image_id
59
+ assert_equal campaign.medium_image_id, new_campaign.medium_image_id
60
+ assert_equal campaign.small_image_id, new_campaign.small_image_id
61
+ assert_equal campaign.organisation_formatted_name, new_campaign.organisation_formatted_name
62
+ assert_equal campaign.organisation_url, new_campaign.organisation_url
63
+ assert_equal campaign.organisation_brand_colour, new_campaign.organisation_brand_colour
64
+ assert_equal campaign.organisation_crest, new_campaign.organisation_crest
65
+ end
66
+
67
+ should "be not valid with an organisation brand colour from outside the list" do
68
+ campaign = FactoryGirl.build(:campaign_edition, :panopticon_id => @artefact.id)
69
+ campaign.organisation_brand_colour = "something-else"
70
+
71
+ refute campaign.valid?
72
+ assert campaign.errors.has_key?(:organisation_brand_colour)
73
+ end
74
+
75
+ should "be not valid with an organisation crest from outside the list" do
76
+ campaign = FactoryGirl.build(:campaign_edition, :panopticon_id => @artefact.id)
77
+ campaign.organisation_crest = "something-else"
78
+
79
+ refute campaign.valid?
80
+ assert campaign.errors.has_key?(:organisation_crest)
81
+ end
82
+
83
+ should "be valid with a blank organisation crest and brand colour" do
84
+ campaign = FactoryGirl.build(:campaign_edition, :panopticon_id => @artefact.id)
85
+ campaign.organisation_crest = ''
86
+ campaign.organisation_brand_colour = ''
87
+
88
+ assert campaign.valid?
89
+ end
90
+ end