summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Goodman <jgoodman@gitlab.com>2019-07-02 13:40:04 -0400
committerJason Goodman <jgoodman@gitlab.com>2019-07-02 13:46:28 -0400
commit689d6d831fc9ff38a0e5e816b8d837eae79eace1 (patch)
tree573e3c2f8601f8dc62ba5a506eb65fbba8619223
parent6a2981bb4e21f12e1b307f8f14fd6d48a4fc3946 (diff)
downloadgitlab-ce-pre-releases-38105a.tar.gz
Move default value for released_at into modelpre-releases-38105a
Add note that released_at defaults to current time in api
-rw-r--r--app/models/release.rb6
-rw-r--r--app/services/releases/create_service.rb2
-rw-r--r--lib/api/releases.rb4
-rw-r--r--spec/models/release_spec.rb10
4 files changed, 18 insertions, 4 deletions
diff --git a/app/models/release.rb b/app/models/release.rb
index 929dd6c9cde..459a7c29ad0 100644
--- a/app/models/release.rb
+++ b/app/models/release.rb
@@ -12,6 +12,10 @@ class Release < ApplicationRecord
has_many :links, class_name: 'Releases::Link'
+ default_value_for :released_at, allows_nil: false do
+ Time.zone.now
+ end
+
accepts_nested_attributes_for :links, allow_destroy: true
validates :description, :project, :tag, presence: true
@@ -45,7 +49,7 @@ class Release < ApplicationRecord
end
def upcoming_release?
- released_at > Time.zone.now
+ released_at.present? && released_at > Time.zone.now
end
private
diff --git a/app/services/releases/create_service.rb b/app/services/releases/create_service.rb
index 7d3d1febde0..5b13ac631ba 100644
--- a/app/services/releases/create_service.rb
+++ b/app/services/releases/create_service.rb
@@ -58,7 +58,7 @@ module Releases
author: current_user,
tag: tag.name,
sha: tag.dereferenced_target.sha,
- released_at: released_at || Time.zone.now,
+ released_at: released_at,
links_attributes: params.dig(:assets, 'links') || []
)
end
diff --git a/lib/api/releases.rb b/lib/api/releases.rb
index d1fd1a8162d..fdd8406388e 100644
--- a/lib/api/releases.rb
+++ b/lib/api/releases.rb
@@ -54,7 +54,7 @@ module API
requires :url, type: String
end
end
- optional :released_at, type: DateTime, desc: 'The date when the release will be/was ready'
+ optional :released_at, type: DateTime, desc: 'The date when the release will be/was ready. Defaults to the current time.'
end
post ':id/releases' do
authorize_create_release!
@@ -78,7 +78,7 @@ module API
requires :tag_name, type: String, desc: 'The name of the tag', as: :tag
optional :name, type: String, desc: 'The name of the release'
optional :description, type: String, desc: 'Release notes with markdown support'
- optional :released_at, type: DateTime, desc: 'The date when the release will be/was ready'
+ optional :released_at, type: DateTime, desc: 'The date when the release will be/was ready. Defaults to the current time.'
end
put ':id/releases/:tag_name', requirements: RELEASE_ENDPOINT_REQUIREMETS do
authorize_update_release!
diff --git a/spec/models/release_spec.rb b/spec/models/release_spec.rb
index 7c106ce6b85..e9d846e7291 100644
--- a/spec/models/release_spec.rb
+++ b/spec/models/release_spec.rb
@@ -64,4 +64,14 @@ RSpec.describe Release do
is_expected.to all(be_a(Releases::Source))
end
end
+
+ describe '#upcoming_release?' do
+ context 'during the backfill migration when released_at could be nil' do
+ it 'handles a nil released_at value and returns false' do
+ allow(release).to receive(:released_at).and_return nil
+
+ expect(release.upcoming_release?).to eq(false)
+ end
+ end
+ end
end