govuk_content_models 28.0.1 → 28.1.0
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.
data/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
class Downtime
|
|
2
|
+
include Mongoid::Document
|
|
3
|
+
include Mongoid::Timestamps
|
|
4
|
+
|
|
5
|
+
field :message, type: String
|
|
6
|
+
field :start_time, type: DateTime
|
|
7
|
+
field :end_time, type: DateTime
|
|
8
|
+
|
|
9
|
+
belongs_to :artefact
|
|
10
|
+
|
|
11
|
+
validates_presence_of :message, :start_time, :end_time, :artefact
|
|
12
|
+
validate :end_time_is_in_future, on: :create
|
|
13
|
+
validate :start_time_precedes_end_time
|
|
14
|
+
|
|
15
|
+
def self.for(artefact)
|
|
16
|
+
where(artefact_id: artefact.id).first
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def publicise?
|
|
20
|
+
Time.zone.now.between?(start_time.to_date - 1, end_time) # starting at midnight a day before start time
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def end_time_is_in_future
|
|
26
|
+
errors.add(:end_time, "must be in the future") if end_time && ! end_time.future?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def start_time_precedes_end_time
|
|
30
|
+
errors.add(:start_time, "must be earlier than end time") if start_time && end_time && start_time >= end_time
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -19,6 +19,13 @@ FactoryGirl.define do
|
|
|
19
19
|
disabled true
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
factory :downtime do
|
|
23
|
+
message "This service will be unavailable from 3pm to 6pm tomorrow"
|
|
24
|
+
start_time (Date.today + 1).to_time + (15 * 60 * 60)
|
|
25
|
+
end_time (Date.today + 1).to_time + (18 * 60 * 60)
|
|
26
|
+
artefact
|
|
27
|
+
end
|
|
28
|
+
|
|
22
29
|
factory :tag do
|
|
23
30
|
sequence(:tag_id) { |n| "crime-and-justice-#{n}" }
|
|
24
31
|
sequence(:title) { |n| "The title #{n}" }
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class DowntimeTest < ActiveSupport::TestCase
|
|
4
|
+
context "validations" do
|
|
5
|
+
should "validate presence of message" do
|
|
6
|
+
downtime = FactoryGirl.build(:downtime, message: nil)
|
|
7
|
+
|
|
8
|
+
refute downtime.valid?
|
|
9
|
+
assert_includes downtime.errors[:message], "can't be blank"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
should "validate presence of start time" do
|
|
13
|
+
downtime = FactoryGirl.build(:downtime, start_time: nil)
|
|
14
|
+
|
|
15
|
+
refute downtime.valid?
|
|
16
|
+
assert_includes downtime.errors[:start_time], "can't be blank"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
should "validate presence of end time" do
|
|
20
|
+
downtime = FactoryGirl.build(:downtime, end_time: nil)
|
|
21
|
+
|
|
22
|
+
refute downtime.valid?
|
|
23
|
+
assert_includes downtime.errors[:end_time], "can't be blank"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
should "validate presence of artefact" do
|
|
27
|
+
downtime = FactoryGirl.build(:downtime, artefact: nil)
|
|
28
|
+
|
|
29
|
+
refute downtime.valid?
|
|
30
|
+
assert_includes downtime.errors[:artefact], "can't be blank"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
should "validate end time is in future" do
|
|
34
|
+
downtime = FactoryGirl.build(:downtime, end_time: Date.today - 1)
|
|
35
|
+
|
|
36
|
+
refute downtime.valid?
|
|
37
|
+
assert_includes downtime.errors[:end_time], 'must be in the future'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
should "validate end time is in future only on create" do
|
|
41
|
+
downtime = FactoryGirl.create(:downtime)
|
|
42
|
+
downtime.assign_attributes(start_time: Date.today - 3, end_time: Date.today - 1)
|
|
43
|
+
|
|
44
|
+
assert downtime.valid?
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
should "validate start time is earlier than end time" do
|
|
48
|
+
downtime = FactoryGirl.build(:downtime, start_time: Date.today + 2, end_time: Date.today + 1)
|
|
49
|
+
|
|
50
|
+
refute downtime.valid?
|
|
51
|
+
assert_includes downtime.errors[:start_time], "must be earlier than end time"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context "for an artefact" do
|
|
56
|
+
should "be returned if found" do
|
|
57
|
+
downtime = FactoryGirl.create(:downtime)
|
|
58
|
+
assert_equal downtime, Downtime.for(downtime.artefact)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
should "be nil if not found" do
|
|
62
|
+
assert_nil Downtime.for(FactoryGirl.build(:artefact))
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
context "publicising downtime" do
|
|
67
|
+
should "start at midnight a day before it is scheduled" do
|
|
68
|
+
Timecop.freeze(Date.today) do # beginnning of today
|
|
69
|
+
downtime = FactoryGirl.build(:downtime)
|
|
70
|
+
|
|
71
|
+
downtime.start_time = (Date.today + 1).to_time + (3 * 60 * 60) # 3am tomorrow
|
|
72
|
+
assert downtime.publicise?
|
|
73
|
+
|
|
74
|
+
downtime.start_time = Date.today.to_time + (21 * 60 * 60) # 9pm today
|
|
75
|
+
assert downtime.publicise?
|
|
76
|
+
|
|
77
|
+
downtime.start_time = Date.today + 2 # day after tomorrow
|
|
78
|
+
refute downtime.publicise?
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
should "stop after scheduled end time" do
|
|
83
|
+
Timecop.freeze(Time.zone.now + 10) do
|
|
84
|
+
downtime = FactoryGirl.build(:downtime)
|
|
85
|
+
|
|
86
|
+
downtime.end_time = Time.zone.now
|
|
87
|
+
refute downtime.publicise?
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
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: 28.0
|
|
4
|
+
version: 28.1.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: 2015-01-
|
|
12
|
+
date: 2015-01-13 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: bson_ext
|
|
@@ -347,6 +347,7 @@ files:
|
|
|
347
347
|
- app/models/campaign_edition.rb
|
|
348
348
|
- app/models/completed_transaction_edition.rb
|
|
349
349
|
- app/models/curated_list.rb
|
|
350
|
+
- app/models/downtime.rb
|
|
350
351
|
- app/models/edition.rb
|
|
351
352
|
- app/models/guide_edition.rb
|
|
352
353
|
- app/models/help_page_edition.rb
|
|
@@ -429,6 +430,7 @@ files:
|
|
|
429
430
|
- test/models/business_support_edition_test.rb
|
|
430
431
|
- test/models/campaign_edition_test.rb
|
|
431
432
|
- test/models/curated_list_test.rb
|
|
433
|
+
- test/models/downtime_test.rb
|
|
432
434
|
- test/models/edition_scheduled_for_publishing_test.rb
|
|
433
435
|
- test/models/edition_test.rb
|
|
434
436
|
- test/models/help_page_edition_test.rb
|
|
@@ -475,7 +477,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
475
477
|
version: '0'
|
|
476
478
|
segments:
|
|
477
479
|
- 0
|
|
478
|
-
hash:
|
|
480
|
+
hash: 1243140103051612447
|
|
479
481
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
480
482
|
none: false
|
|
481
483
|
requirements:
|
|
@@ -484,7 +486,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
484
486
|
version: '0'
|
|
485
487
|
segments:
|
|
486
488
|
- 0
|
|
487
|
-
hash:
|
|
489
|
+
hash: 1243140103051612447
|
|
488
490
|
requirements: []
|
|
489
491
|
rubyforge_project:
|
|
490
492
|
rubygems_version: 1.8.23
|
|
@@ -510,6 +512,7 @@ test_files:
|
|
|
510
512
|
- test/models/business_support_edition_test.rb
|
|
511
513
|
- test/models/campaign_edition_test.rb
|
|
512
514
|
- test/models/curated_list_test.rb
|
|
515
|
+
- test/models/downtime_test.rb
|
|
513
516
|
- test/models/edition_scheduled_for_publishing_test.rb
|
|
514
517
|
- test/models/edition_test.rb
|
|
515
518
|
- test/models/help_page_edition_test.rb
|