diff --git a/app/helpers/upgrades_helper.rb b/app/helpers/upgrades_helper.rb index 4361ae90..c8f579c6 100644 --- a/app/helpers/upgrades_helper.rb +++ b/app/helpers/upgrades_helper.rb @@ -1,12 +1,12 @@ module UpgradesHelper - def upgrade_notification + def get_upgrade_for_notification(user, upgrades_mode) return nil unless ENV["UPGRADES_ENABLED"] == "true" completed_upgrade = Upgrader.completed_upgrade - return completed_upgrade if completed_upgrade && Current.user.last_alerted_upgrade_commit_sha != completed_upgrade.commit_sha + return completed_upgrade if completed_upgrade && user.last_alerted_upgrade_commit_sha != completed_upgrade.commit_sha available_upgrade = Upgrader.available_upgrade - if available_upgrade && Setting.upgrades_mode == "manual" && Current.user.last_prompted_upgrade_commit_sha != available_upgrade.commit_sha + if available_upgrade && upgrades_mode == "manual" && user.last_prompted_upgrade_commit_sha != available_upgrade.commit_sha available_upgrade end end diff --git a/app/models/upgrader/upgrade.rb b/app/models/upgrader/upgrade.rb index 26b09226..6a842947 100644 --- a/app/models/upgrader/upgrade.rb +++ b/app/models/upgrader/upgrade.rb @@ -13,7 +13,9 @@ class Upgrader::Upgrade end def available? - version > Maybe.version || (version == Maybe.version && commit_sha != Maybe.commit_sha) + return false if commit_sha == Maybe.commit_sha || version < Maybe.version + return false if version == Maybe.version && type == "release" + true end def to_s diff --git a/app/views/layouts/with_sidebar.html.erb b/app/views/layouts/with_sidebar.html.erb index 7950d53a..f014dd66 100644 --- a/app/views/layouts/with_sidebar.html.erb +++ b/app/views/layouts/with_sidebar.html.erb @@ -12,7 +12,9 @@ - <%= render "shared/upgrade_notification" %> + <% if (upgrade = get_upgrade_for_notification(Current.user, Setting.upgrades_mode)) %> + <%= render partial: "shared/upgrade_notification", locals: { upgrade: upgrade } %> + <% end %> <% end %> <%= render template: "layouts/application" %> diff --git a/app/views/shared/_upgrade_notification.html.erb b/app/views/shared/_upgrade_notification.html.erb index bd24268c..d285d678 100644 --- a/app/views/shared/_upgrade_notification.html.erb +++ b/app/views/shared/_upgrade_notification.html.erb @@ -1,19 +1,17 @@ -<% if upgrade_notification %> - <% upgrade = upgrade_notification %> -
-
-

<%= link_to upgrade.to_s, upgrade.url, class: "text-sm text-blue-500 underline hover:text-blue-700", target: "_blank" %>

- <% if upgrade.complete? %> -

<%= t(".app_upgraded", version: upgrade.to_s) %>

- <% else %> -

<%= t(".new_version_available") %>

- <% end %> -
-
- <%= button_to t(".dismiss"), acknowledge_upgrade_path(upgrade.commit_sha), method: :post, class: "#{upgrade.complete? ? 'bg-gray-900 text-white' : 'bg-gray-100 text-gray-900'} text-sm font-bold p-2 rounded-lg" %> - <% if upgrade.available? %> - <%= button_to t(".upgrade_now"), deploy_upgrade_path(upgrade.commit_sha), method: :post, class: "bg-gray-900 hover:bg-gray-700 text-white font-medium text-sm p-2 rounded-lg" %> - <% end %> -
+<%# locals: (upgrade:) %> +
+
+

<%= link_to upgrade.to_s, upgrade.url, class: "text-sm text-blue-500 underline hover:text-blue-700", target: "_blank" %>

+ <% if upgrade.complete? %> +

<%= t(".app_upgraded", version: upgrade.to_s) %>

+ <% else %> +

<%= t(".new_version_available") %>

+ <% end %>
-<% end %> +
+ <%= button_to t(".dismiss"), acknowledge_upgrade_path(upgrade.commit_sha), method: :post, class: "#{upgrade.complete? ? 'bg-gray-900 text-white' : 'bg-gray-100 text-gray-900'} text-sm font-bold p-2 rounded-lg" %> + <% if upgrade.available? %> + <%= button_to t(".upgrade_now"), deploy_upgrade_path(upgrade.commit_sha), method: :post, class: "bg-gray-900 hover:bg-gray-700 text-white font-medium text-sm p-2 rounded-lg" %> + <% end %> +
+
diff --git a/test/models/upgrader/upgrade_test.rb b/test/models/upgrader/upgrade_test.rb new file mode 100644 index 00000000..cf99ed7c --- /dev/null +++ b/test/models/upgrader/upgrade_test.rb @@ -0,0 +1,36 @@ +require "test_helper" + +class UpgradeTest < ActiveSupport::TestCase + setup do + data = { + commit_sha: "latestcommit", + version: Semver.new("0.1.0-alpha.2") + } + + @commit_upgrade = Upgrader::Upgrade.new "commit", data + @release_upgrade = Upgrader::Upgrade.new "release", data + end + + test "available if latest commit and app not upgraded" do + Maybe.stubs(:version).returns(@commit_upgrade.version) + Maybe.stubs(:commit_sha).returns("outdatedcommitsha") + + assert @commit_upgrade.available? + assert_not @release_upgrade.available? + end + + test "available if latest release and app not upgraded" do + Maybe.stubs(:version).returns(Semver.new("0.1.0-alpha.1")) + Maybe.stubs(:commit_sha).returns("outdatedcommitsha") + + assert @commit_upgrade.available? + assert @release_upgrade.available? + end + + test "not available if app commit greater or equal to" do + Maybe.stubs(:version).returns(@commit_upgrade.version) + Maybe.stubs(:commit_sha).returns(@commit_upgrade.commit_sha) + + assert_not @commit_upgrade.available? + end +end